解題思路:
原來不會寫,只能想到去暴搜,真的沒有想到是個狀壓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列組成,地圖的每一格可能是山地...