js省裡冬令營夏令營講深搜都講到了
今天上午測試的題,15分,因為剪枝沒剪乾淨,少了個等於號,於是本來能拿到的分也沒拿到,唉
主要思想dfs+剪枝
#include
using
namespace std;
int m,n;
//依照題目
int a[
107]
[107];
//存顏色
int vis[
107]
[107];
//存來到這個點最少花的金幣
int dx[4]
=;//增量陣列
int dy[4]
=;//增量陣列
int ans=
0x3f3f3f3f
;//答案
void
dfs(
int x,
int y,
int mon,
bool use)
//就是下面這個等於號
if(mon>=vis[x]
[y])
return
;//如果到了這個點,但所花金幣已經大於等於最小代價了,捨去
else vis[x]
[y]=mon;
//不然更新最小代價
if(mon>ans)
return
;//如果已經比當前最小答案大了,捨去
//按理說,這裡應該也添乙個等於號,但是沒被卡到
for(
int i=
0;i<
4;i++
)else
if(use==
false
)else
continue
;//現在不能用魔法}}
return;}
intmain()
dfs(1,
1,0,
false);
//從七點出發
if(ans!=
0x3f3f3f3f
)cout/答案被更新過了
else cout<<-1
/答案沒有被更新過,無解
return0;
}
以後大家寫程式一定要注意等於號,還有mn有沒有反 洛谷 P3956 棋盤
找了找發現這週做的竟然都是水題,那麼就把不知道多久以前的一道水題發出來吧。p3956 棋盤 有乙個m m的棋盤,棋盤上每乙個格仔可能是紅色 黃色或沒有任何顏色的。你現在要從棋盤的最左上角走到棋盤的最右下角。任何乙個時刻,你所站在的位置必須是有顏色的 不能是無色的 你只能向上 下 左 右四個方向前進。...
洛谷 P3956 棋盤(DFS)
有乙個m m的棋盤,棋盤上每乙個格仔可能是紅色 黃色或沒有任何顏色的。你現在要從棋盤的最左上角走到棋盤的最右下角。任何乙個時刻,你所站在的位置必須是有顏色的 不能是無色的 你只能向上 下 左 右四個方向前進。當你從乙個格仔走向另乙個格仔時,如果兩個格仔的顏色相同,那你不需要花費金幣 如果不同,則你需...
洛谷 P3956 棋盤題解
題目 p3956 棋盤 但這個魔法不能連續使用,而且這個魔法的持續時間很短,也就是說,如果你使用了這個魔法,走到了這個暫時有顏色的格仔上,你就不能繼續使用魔法。include include include using namespace std const int maxn 5000 const ...