炮兵陣地
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 4sample outputphpp
pphh
pppp
phpp
phhp
6source
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...