POJ 1185 炮兵陣地(狀態壓縮DP)

2022-03-24 09:42:58 字數 794 閱讀 2535

題意:

給 n,m(n<=100,m<=10),之後給出乙個 n*m 由 "h"、"p" 組成的乙個矩陣,h--代表山地,p--代表平原,一架炮的攻擊範圍如圖所示;炮可以攻擊 h(山地),但只能架在p(平原),在防止誤傷的前提下(即炮不可以架在攻擊範圍之內,但攻擊範圍可以重疊),求整個區域最多能擺多少架炮?不是求方案數,不是求方案數,不是求方案數。

思路:

1.仔細分析問題後,發現該問題可以抽象為 0 1 的子問題,即假設 1 為有炮,0 為沒有炮,最終答案是乙個 n*m 的0 1矩陣中1的個數。

既然如此,先將n*m的h,p矩陣轉換為01矩陣,再將其按行壓縮為十進位制的一維陣列保。**如下

char c;

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

a[i]=sum;

}

2.再進行防止誤傷的分析時,將每乙個炮分為橫向防止誤傷,縱向防止誤傷兩種情況來處理。對橫向防誤傷可以進行預處理,只將不會進行相互攻擊的情況提前找出來(即找出兩個1之間有兩個即兩個以上0的情況), 再看條件m<=10,最多有1024中 0 1的全排列,所以符合的狀態最多有60種。**如下

init(0,0);//main()中的介面

//普通遞迴函式求符合解,並儲存

void init(int i,int flag)}}

}for(int i=3;i<=n;++i)}}

}}

printf("%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...