POJ 1185 炮兵布陣

2021-08-11 18:00:25 字數 961 閱讀 5287

解題思路:

原來不會寫,只能想到去暴搜,真的沒有想到是個狀壓dp題目。還是覺得挺難的,

找了好幾份題解才明白的。

**:

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

const int maxn = 120;

int n,m; ///n行m列

int cnt; ///僅僅滿足同一行中炮兵不相互攻擊的方案數

int rawstate[maxn]; ///存放原圖中每行的狀態。

int num[maxn]; ///存放某種狀態對應的炮兵數

int state[maxn]; ///僅僅滿足同一行中炮兵不相互攻擊的狀態

int dp[maxn][maxn][maxn]; ///dp[i][j][k]表示第i行狀態是state[j],第i-1行狀態是state[k]的最優解

///不合法返回真,合法返回假

bool notlegal(int x,int y)

int main()

state[cnt++] = i;

}///單獨考慮第1行

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

///單獨考慮第2行,其狀態由第一行推得,列舉,第2行的所有狀態與第1行組合

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

}///然後考慮3~n行

for(int row = 3; row <= n; row++) }}

}int ans = 0;

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

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

}return 0;

}

POJ 1185 炮兵布陣

司令部的將軍們打算在n m的網格地圖上部署他們的炮兵部隊。乙個n m的地圖由n行m列組成,地圖的每一格可能是山地 用 h 表示 也可能是平原 用 p 表示 如下圖。在每一格平原地形上最多可以布置一支炮兵部隊 山地上不能夠部署炮兵部隊 一支炮兵部隊在地圖上的攻擊範圍如圖中黑色區域所示 如果在地圖中的灰...

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

include include include include using namespace std define legal a,b a b int row,col 行列 int nums 僅是兩個炮兵不互相攻擊的條件下,符合條件的狀態個數 int base 150 第i行的原地圖壓縮成的乙個狀...

poj 1185 炮兵布陣 狀壓dp

炮兵陣地 time limit 2000ms memory limit 65536k total submissions 29250 accepted 11331 description 司令部的將軍們打算在n m的網格地圖上部署他們的炮兵部隊。乙個n m的地圖由n行m列組成,地圖的每一格可能是山地...