POJ 1185 炮兵陣地

2021-07-11 06:54:27 字數 1144 閱讀 3606

題意:在n×m的地圖上放置炮兵,每個炮兵的攻擊範圍是上下左右各延伸兩格,地圖上有一些位置為山地,不可以放置,問給出地圖可以放置炮兵的最多數量。

思路:狀態壓縮dp,如果當前第i行放置,由於考慮到炮兵的攻擊範圍,所以需要列舉前兩行的狀態,所以用dp[i][s1][s2]來表示第i行狀態為s1,上一行狀態為s2的最多炮兵放置數量。由於每一行地形不一定相同,所以先把每一行可行的狀態先預處理出來。然後再dp。

#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define rep(i,j,k) for (int i=j;i<=k;i++)

#define rrep(i,j,k) for (int i=j;i>=k;i--)

#define clean(x,y) memset(x,y,sizeof(x))

#define ll long long

#define ull unsigned long long

#define inf 0x7fffffff

#define mod %100000007

int n,m;

int a[109][12];

vectorstate[109];

int now[109]; //每一行地圖的狀態

mapnum; //存每個狀態的人數

int dp[109][65][65];

void init()

{ num.clear();

int tot = 0;

rep(i,0,1<<10)

{if ( i & (i<<2) || i & (i<<1) ) continue;

int x = 0;

rep(j,0,9) if ( i & (1<

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