**雖長,但核心思想不難,基礎的動態規劃問題。提交後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 點血量,他的血量...