poj 1185 炮兵陣地(狀態壓縮dp)

2021-08-11 15:04:03 字數 710 閱讀 3131

這道題是比較經典(正經)的狀壓dp。不過預處理的東西還是比較多的。

題意:中文題就不用說了吧。。。

思路:狀態壓縮dp。預處理出每一行符合要求的狀態,山地就預設為已經放了部隊(但是不影響周圍放部隊)。

用sum陣列儲存合法狀態下能放多少部隊,即該狀態二進位制1的數量。預處理第一行的狀態,然後直接for列舉每乙個合法狀態和上一行、上上行的狀態,注意判斷狀態是否合法(這一行這個位置放了,上一行、上上行這個位置都不能放),最後再取一下最大值即可。

ac**:

#include#include#include#include#include#include#include#include#includeusing namespace std;

int sum[110],c[110],zt[110],n,m,nm,ans;

char a[110][20];

int dp[110][80][80];

void init()

int fcount(int x)//求數x中所含1的個數

return s;

}int main()

}for(i=0;ifor(i=1;ifor(j=0;j}

}ans=0;

for(i=0;ifor(j=0;jfor(k=0;kprintf("%d\n",ans);

}return 0;

}

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...