POJ 1185 炮兵布陣 (動態規劃)

2021-07-16 03:37:25 字數 951 閱讀 8123

#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列組成,地圖的每一格可能是山地...