經典例題 POJ 1185 炮兵陣地

2021-06-20 09:44:27 字數 2136 閱讀 2410

炮兵陣地

time limit:2000ms

memory limit:65536k

total submissions:16293

accepted:6204

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

題意:有乙個網格,其中有些地方不能放上炮兵,有的地方能放上且僅能放乙個炮兵,某個格仔放上炮兵後,這個格仔以及左邊兩格,右邊兩格,上邊兩格,下邊兩格,都不能再放炮兵了,問最多能放多少個炮兵

思路:一列最多只有10格,我們dfs一下看最多有多少種放置情況,發現原來只有60種,那麼當我們在考慮一行該如何放置炮兵時,其實只需要考慮上一行以及上兩行的情況,我們用dp[i][j][k] 表示在第i行的排放炮兵的情況為第j種放置方法,第i-1行的炮兵的情況為第k種放置辦法,那麼轉移方程就是 dp[i][j][k] = min(dp[i-1][s][j])+w[k] , w[k] 為第k種放置情況下排放的炮兵數目,當然要判斷一下j和k, s和j ,j和s 是否有衝突,判斷i,j,k是在對應的行是否與(h) 有衝突。然後注意第一行的初始化,基本就沒什麼問題了

**:#include

#include

#include

#include

using namespace std;

const int maxn = 1<<11;

int state[maxn];

int dp[110][70][70];

int w[maxn];

int sz , n , m;

char input[20];

int place[110];

bool can[110][70];

bool canput[maxn][maxn];

void dfs(int cur,int s,int sum)

dfs(cur+3 , s+(1

void match()

} } }

} bool canput(int pre,int s)

int main()

match();

int ans = 0;

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

for (int i = 0 ; i < sz ; ++i)

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

}  }

for (int i = 0 ; i < sz ; ++i)

for (int j = 0 ; j < sz ; ++j) if (ans < dp[n][i][j])

ans = dp[n][i][j];

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

}

poj 1185 炮兵陣地

題目鏈結 題意 在n m的網格地圖上部署炮兵部隊。地圖的每一格可能是山地 用 h 表示 也可能是平原 用 p 表示 如下圖。在每一格平原地形上最多可以布置一支炮兵部隊 山地上不能夠部署炮兵部隊 一支炮兵部隊在地圖上的攻擊範圍如圖中黑色區域所示 如果在地圖中的灰色所標識的平原上部署一支炮兵部隊,則圖中...

POJ 1185 炮兵陣地

include include include include include include include include include include include include include include define sz v int v size define rep i,n ...

POJ 1185 炮兵陣地

狀態壓縮專題第一題,自己想了很久,最終還是以別人的 為模板寫的。dp共三維,一維是行數,一維是前一行狀態,一維是前第二行狀態。ps 直接開三維太大,用s陣列記錄下所有可能出現的情況,大大減少時間和空間。include include include includeusing namespace st...