題意:在乙個二維方格中,安置大炮。有平原有高山,只有平原可以安。
大炮的射程是四個方向,距離為2格。
求:最多能安多少個大炮。
方法:對於每一行的一種狀態用乙個整數表示,第乙個位對應一格,1代表放,0代表不放。
這樣當前行的狀態是否可行與當前行的地開有關,與相互之間的大炮安置位置有關,
與前兩行的大炮位置有關,其直接計算的時間 複雜度為o(n*2^m*2^m&2^m),
最高能達到100000000000,這麼多。但每一行中符合一定條件(當前行大炮之間的矛盾)
的狀態較少,最多為60個。這樣就直接把複雜度降到了21600000左右。
dp[i][j][k]中代表在第i行中當前行的狀態為k,上一行的狀態為j時的最大大炮數。
s[i]代表滿足要求的第i個狀態(用於加速)。
map[i] 記錄第i行的地形狀態。
**:#includeusing namespace std;
int n,m;
int s[61];
int nstate;
int dp[101][61][61];
int map[101];
bool isok(int x)
int sum(int x)
return num;
}int main()
{ freopen("in.txt","r",stdin);
int i,j,k,h;
cin>>n>>m;
char str[11];
for (i=0;i>str;
for (j=0;j
poj1185 炮兵陣地(狀態壓縮)
炮兵陣地 time limit 2000ms memory limit 65536k total submissions 15261 accepted 5743 description 司令部的將軍們打算在n m的網格地圖上部署他們的炮兵部隊。乙個n m的地圖由n行m列組成,地圖的每一格可能是山地 ...
poj 1185炮兵陣地(狀態壓縮)
炮兵陣地 time limit 2000ms memory limit 65536k total submissions 32180 accepted 12437 description 司令部的將軍們打算在n m的網格地圖上部署他們的炮兵部隊。乙個n m的地圖由n行m列組成,地圖的每一格可能是山地...
1185 炮兵陣地
炮兵陣地 time limit 2000ms memory limit 65536k total submissions 2762 accepted 776 description 司令部的將軍們打算在n m的網格地圖上部署他們的炮兵部隊。乙個n m的地圖由n行m列組成,地圖的每一格可能是山地 用 ...