逃生 計蒜客 動態規劃基礎

2021-10-03 13:56:32 字數 1681 閱讀 3679

**雖長,但核心思想不難,基礎的動態規劃問題。提交後6個樣例裡通過了5個,覺得演算法應該沒問題的。找了一上午都沒發現問題原因。最後還是將所有資料全部列印出來,才發現在for迴圈這裡出了大問題。

是在處理右下塊的時候誤將for(int i=x+1;i<=n;i++)寫成了for(int i=x+1;i>=1;i–),不僅右下角的資料沒算出來,還把右上正確的資料給部分覆蓋了。

有時候通過了幾個樣例,並不代表僅存在小毛病,能通過的幾個樣例可能是巧合罷了。

一道簡單的題目花了很久的時間才解決,開始怎麼看都看不出問題,實在是挺折磨人的。

總之,找bug不易,寫**切記要細心啊!!

(print版)

#include

using

namespace std;

int map[

1001][

1001];

const

int neg=0;

long

long

int dp[

1001][

1001];

intmain()

} dp[x]

[y]=v;

for(

int i=x;i>=

1;i--

)else

else}}

else

if(j==y)

else

}else

else}if

(dp[i]

[j]>=c)

// for(int i=1;i<=n;i++)

// cout<<'\n';

// }

// cout<<'\n'; }}

for(

int i=x;i>=

1;i--

)else

}else

else}if

(dp[i]

[j]>=c)

// for(int i=1;i<=n;i++)

// cout<<'\n';

// }

// cout<<'\n';}}

for(

int i=x+

1;i<=n;i++

)else

}else

else}if

(dp[i]

[j]>=c)

// for(int i=1;i<=n;i++)

// cout<<'\n';

// }

// cout<<'\n';}}

for(

int i=x+

1;i<=m;i++

)else

if(dp[i]

[j]>=c)

// for(int i=1;i<=n;i++)

// cout<<'\n';

// }

// cout<<'\n';}}

int a=

max(dp[1]

[1],dp[1]

[m])

;int b=

max(dp[n][1

],dp[n]

[m])

; a=

max(a,b);if

(a<=0)

else

return0;

}

計蒜客 逃生(基礎動態規劃)

蒜頭君在玩一款逃生的遊戲。在乙個 n times mn m 的矩形地圖上,蒜頭位於其中乙個點。地圖上每個格仔有加血的藥劑,和掉血的火焰,藥劑的藥效不同,火焰的大小也不同,每個格仔上有乙個數字,如果格仔上的數字是正數說明是乙個藥劑代表增加的生命值,如果是負數說明是火焰代表失去的生命值。蒜頭初始化有 v...

迷宮逃生 計蒜客習題 狀態壓縮搜尋

題目 迷宮逃生 計蒜客習題 ac題解 方法 狀壓dp 二進位制 詳解 個三元bool陣列 vis x y mask 表示當前狀態,含義是當前在 x,y 這個點,鑰匙狀態是 mask bfs 搜尋,當下 個點是鑰匙時,新放的狀態的 mask 或上這把鑰匙,當下 個點是 時,只有當 mask 上這把鑰匙...

計蒜客 逃生dp

蒜頭君在玩一款逃生的遊戲。在乙個 n m 的矩形地圖上,蒜頭位於其中乙個點。地圖上每個格仔有加血的藥劑,和掉血的火焰,藥劑的藥效不同,火焰的大小也不同,每個格仔上有乙個數字,如果格仔上的數字是正數說明是乙個藥劑代表增加的生命值,如果是負數說明是火焰代表失去的生命值。蒜頭初始化有 v 點血量,他的血量...