原來寫過這篇博哦,超詳細誒。。。哈哈!!
再寫一遍,覺得比較重要和值得注意的兩點是:
1】遞推時i行、i-1行 、i-2行選擇狀態的三個for迴圈的巢狀順序。
感覺順序好像沒什麼。我不知道為什麼第一次寫的是時候是最外層是i,然後是i-2行,最內層是i-1行。
其實由於第i行的狀態是由前兩行得到,而i-1行是由i-2得到。所以由外到內應該是i、i-1、i-2比較好理解吧。。。
我也試過了,是可行的。
2】儲存所有滿足硬性條件的狀態陣列到底要開多大。(在1<<10範圍內選擇的滿足不存在相鄰兩個1且不存在
間隔乙個有1的狀態數)
#include#include#includeusing namespace std;
int cur[105],dp[105][70][70],ok[70],num[110],cnt;
char mp[105][15];
int max(int x,int y)
bool isok(int t)
void init(int n)
return sum;
}int main()
}for(int i=1;i
poj1185 炮兵陣地(狀態壓縮)
炮兵陣地 time limit 2000ms memory limit 65536k total submissions 15261 accepted 5743 description 司令部的將軍們打算在n m的網格地圖上部署他們的炮兵部隊。乙個n m的地圖由n行m列組成,地圖的每一格可能是山地 ...
poj 1185炮兵陣地(狀態壓縮)
炮兵陣地 time limit 2000ms memory limit 65536k total submissions 32180 accepted 12437 description 司令部的將軍們打算在n m的網格地圖上部署他們的炮兵部隊。乙個n m的地圖由n行m列組成,地圖的每一格可能是山地...
POJ1185 炮兵陣地 狀態壓縮DP
感覺和3254很像,不過這次的間隔變成兩格,當前行的狀態與上兩行的狀態有關。狀態轉移方程 dp k q i max dp k q i dp q j i num k num k 表示狀態k的炮兵數量 dp k q i 表示當前第i行為狀態k上一行的狀態為q的炮兵數量總數。炮兵陣地 time limit...