NOIP2017棋盤(普及T3)

2021-08-11 07:39:27 字數 798 閱讀 8535

題面傳送門

開始想去dp,但是寫完之後發現不滿足dp的無後效性,真是gg

然後開始著手dfs+記憶化。貌似bfs也能跑?(話說我是不是押到題了,之前給四十五中出過一道類似於bfs的題)但感覺複雜度太大,會tle

正解是將已經有色的格仔向四個不同的方向搜尋,未染色的就進行染色,之後再搜尋

一定要注意邊界的判斷啊!

#include

#define rep(i,a,b) for(int i=a;i<=b;i++)

#define dep(i,a,b) for(int i=a;i>=b;i--)

#define ll long long

#define mem(x,num) memset(x,num,sizeof x)

#define inf 0x3f3f3f

using

namespace

std;

const

int maxn=1006,dx[4]=,dy[4]=;

int n,m,x,y,opt,map[maxn][maxn],f[maxn][maxn];

void dfs(int x,int y,int p)

else

}else

}}int main()

f[1][1]=0;

dfs(1,1,0);

if(f[n][n]==1061109567)cout

<<"-1\n";

else

cout

0;}

noip 2017 普及組 T3 棋盤

有乙個m m的棋盤,棋盤上每乙個格仔可能是紅色 黃色或沒有任何顏色的。你現在要從棋盤的最左上角走到棋盤的最右下角。任何乙個時刻,你所站在的位置必須是有顏色的 不能是無色的 你只能向上 下 左 右四個方向前進。當你從乙個格仔走向另乙個格仔時,如果兩個格仔的顏色相同,那你不需要花費金幣 如果不同,則你需...

NOIP2017普及組 棋盤

noip2017 有乙個m m的棋盤,棋盤上每乙個格仔可能是紅色 黃色或沒有任何顏色的。你現在 要從棋盤的最左上角走到棋盤的最右下角。任何乙個時刻,你所站在的位置必須是有顏色的 不能是無色的 你只能向上 下 左 右四個方向前進。當你從乙個格仔走向另乙個格仔時,如果兩個格仔的顏色相同,那你 不需要花費...

NOIP2017普及組 棋盤

棋盤 有乙個m m的棋盤,棋盤上每乙個格仔可能是紅色 黃色或沒有任何顏色的。你現在 要從棋盤的最左上角走到棋盤的最右下角。任何乙個時刻,你所站在的位置必須是有顏色的 不能是無色的 你只能向上 下 左 右四個方向前進。當你從乙個格仔走向另乙個格仔時,如果兩個格仔的顏色相同,那你 不需要花費金幣 如果不...