#include
#include
#include
#include
using
namespace
std;
#define legal(a,b) a&b
int row,col; //行列
int nums; //僅是兩個炮兵不互相攻擊的條件下,符合條件的狀態個數
int base[150]; //第i行的原地圖壓縮成的乙個狀態
int state[70]; //僅是兩個炮兵不互相攻擊的條件下,符合條件的狀態(乙個十進位制數)
int soldier[70]; //對應著,在state[i]狀態下能放多少個士兵
int dp[150][70][70];//dp[i][j][k] 表示第i行狀態為state[j],第i-1行狀態為state[k]時的最優解
char g[150][20];
void init()
int main()}}
for(int i = 0; i < (1
<< col); i++)
state[nums++] = i;
}//nums為每一行首先滿足士兵之間不相互攻擊的狀態數
for(int i = 0; i < nums; i++) //先初始化dp[0][i][0],即初始化第1行的情況
for(int i = 0; i < nums; i++)
}for(int r = 2; r < row; r++)//開始dp}}
}int ans = 0;
for(int i=0; ifor(int j=0; j//列舉dp[row-1][i][j]
ans=max(ans,dp[row-1][i][j]);
printf("%d\n",ans);
}return
0;}
POJ 1185 炮兵布陣
解題思路 原來不會寫,只能想到去暴搜,真的沒有想到是個狀壓dp題目。還是覺得挺難的,找了好幾份題解才明白的。include include include include using namespace std const int maxn 120 int n,m n行m列 int cnt 僅僅滿足...
POJ 1185 炮兵布陣
司令部的將軍們打算在n m的網格地圖上部署他們的炮兵部隊。乙個n m的地圖由n行m列組成,地圖的每一格可能是山地 用 h 表示 也可能是平原 用 p 表示 如下圖。在每一格平原地形上最多可以布置一支炮兵部隊 山地上不能夠部署炮兵部隊 一支炮兵部隊在地圖上的攻擊範圍如圖中黑色區域所示 如果在地圖中的灰...
poj 1185 炮兵布陣 狀壓dp
炮兵陣地 time limit 2000ms memory limit 65536k total submissions 29250 accepted 11331 description 司令部的將軍們打算在n m的網格地圖上部署他們的炮兵部隊。乙個n m的地圖由n行m列組成,地圖的每一格可能是山地...