POJ 1185炮兵陣地 狀態壓縮dp

2021-07-10 06:09:21 字數 2385 閱讀 2304

炮兵陣地

time limit:2000ms

memory limit:65536k

total submissions:23094

accepted:8948

description

司令部的將軍們打算在n*m的網格地圖上部署他們的炮兵部隊。乙個n*m的地圖由n行m列組成,地圖的每一格可能是山地(用"h" 表示),也可能是平原(用"p"表示),如下圖。在每一格平原地形上最多可以布置一支炮兵部隊(山地上不能夠部署炮兵部隊);一支炮兵部隊在地圖上的攻擊範圍如圖中黑色區域所示:

如果在地圖中的灰色所標識的平原上部署一支炮兵部隊,則圖中的黑色的網格表示它能夠攻擊到的區域:沿橫向左右各兩格,沿縱向上下各兩格。圖上其它白色網格均攻擊不到。從圖上可見炮兵的攻擊範圍不受地形的影響。

現在,將軍們規劃如何部署炮兵部隊,在防止誤傷的前提下(保證任何兩支炮兵部隊之間不能互相攻擊,即任何一支炮兵部隊都不在其他支炮兵部隊的攻擊範圍內),在整個地圖區域內最多能夠擺放多少我軍的炮兵部隊。

input

第一行包含兩個由空格分割開的正整數,分別表示n和m;

接下來的n行,每一行含有連續的m個字元('p'或者'h'),中間沒有空格。按順序表示地圖中每一行的資料。n <= 100;m <= 10。

output

僅一行,包含乙個整數k,表示最多能擺放的炮兵部隊的數量。

sample input

5 4

phpp

pphh

pppp

phpp

phhp

sample output

6
source

noi 01

題意就不用解釋了吧

思路:從上往下遍歷,因為炮彈能不能放取決於前兩行的狀態,所以要定義乙個3維陣列 dp[i][j][k] , i  表示該行, j表示滿足情況的該行的狀態,

k 表示上一行的狀態,所以dp[i][j][k] += max(dp[i - 1][k][kk]), kk為上上一行滿足情況的狀態,

最後只要求max(dp[n])的最大值即可

#include#include#include#include#include#include#include #include#include const double pi = acos(-1.0);

using namespace std;

int dp[105][66][66];

int s[100];

int tot;

int a[105][15];

char str[105][15];

const int mod = 100000000;

void init() //先預處理出一行所有能行的情況

s[tot ++] = 2000; //開大乙個, 防止下面m == 10是 s[i] < (1 << m)會無限迴圈下去而超時。

//printf("%d\n", tot);

}int main()

} memset(dp, 0, sizeof(dp));

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

}if(!res)

continue;

//求在沒考慮上上行的情況下求dp

if(i == 1)

//printf("%d\n", k);} }

else}}

}//累加上上滿足情況的dp

if(i == 2)

dp[i][j][k] += mm;} }

else if(i > 2)

}dp[i][j][k] += mm;}}

}} int ans = 0;

for(i = 0; s[i] < (1 << m); ++ i)

}printf("%d\n", ans); }}

/*12 9

hphhphhph

ppphhpphp

hhphhhhpp

phhhhphhp

hhhphphhh

hphpppppp

ppphhpppp

hphphhhph

pphppphph

phphppphp

hphhphhph

hppphhphh

251 10

pppppppppp

42 10

pppppppppp

ppppphpppp

7*/

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