用二進位制數表示一行的狀態
預處理記錄滿足條件的狀態對應十進位制數
因為當前行僅與上兩行有關,所以狀態轉移方程為:
dp[i][k][t] = max(dp[i][k][t], dp[i-1][j][k]+num[t])
num[t]表示狀態t對應的炮台數
dp[i][k][t]表示第i行狀態為t,第i-1行狀態為k時對應的最大值
**如下:
#include #include #include #define maxn 100
using namespace std;
int m, n, top;
int dp[120][maxn][maxn];
int state[maxn], num[maxn];
int cur[120];
char str[maxn];
bool ok(int x)
int count(int x)
return cnt;
}void init() {
top = 0;
int total = 1<
POJ 1185 炮兵陣地 動態規劃 狀態壓縮
由於遞推的時候依賴於三個連續層的關係.一開始想著直接三重for迴圈,但是這裡有個問題就是上一層的0位置上包括著上上層是0和1兩種可能,而後者又對當前行有約束,因此該方法不行.當然有乙個辦法就是增加狀態數,讓狀態能夠表示是從1還是從0轉移過來的.這題有個解法是採用多進製的狀態壓縮 網上瞄了別人的一眼解...
POJ 1185 炮兵陣地(動態規劃 狀態壓縮)
炮兵陣地 description 司令部的將軍們打算在n m的網格地圖上部署他們的炮兵部隊。乙個n m的地圖由n行m列組成,地圖的每一格可能是山地 用 h 表示 也可能是平原 用 p 表示 如下圖。在每一格平原地形上最多可以布置一支炮兵部隊 山地上不能夠部署炮兵部隊 一支炮兵部隊在地圖上的攻擊範圍如...
poj 1185 炮兵陣地
題目鏈結 題意 在n m的網格地圖上部署炮兵部隊。地圖的每一格可能是山地 用 h 表示 也可能是平原 用 p 表示 如下圖。在每一格平原地形上最多可以布置一支炮兵部隊 山地上不能夠部署炮兵部隊 一支炮兵部隊在地圖上的攻擊範圍如圖中黑色區域所示 如果在地圖中的灰色所標識的平原上部署一支炮兵部隊,則圖中...