POJ1185(炮兵陣地) 狀壓DP

2021-07-03 12:22:25 字數 1978 閱讀 1947

每一行的狀態是取決於上一行和上上一行的,所以每次更新的時候需要記錄當前行的狀態和下一行的狀態,然後再進行遞推。。。不過估算了一下複雜度是10的11次方,嚇得我都沒敢寫啊!!!看了一下別人的部落格,居然真有這樣寫過的,於是就自己實現一邊啦【最後看了以下討論版,處理一下複雜度可以降低的,最後貼討論版**】

思路:令p為1,h為0。用乙個陣列存下每一行的狀態。

1.先有陣列num 存下各個狀態的1的個數。

2.設dp[i][j][k] 為考慮了前i-1行,第i-1行的狀態為j,第i-2行的狀態為k的最大炮兵數。

那麼有遞推式dp[i][j][k] = max(dp[i][j][k],dp[i-1][k][t] + num[j]);且j,k,t滿足(j & k) = 0,(k & t) = 0,(j & t) = 0;

然後考慮特例n=1和邊界n=2。

3.直接開陣列應該會爆的,所以滾動陣列實現。

我的**:

#include#include#includeusing namespace std;

const int maxn = 105;

const int maxm = 10;

int n,m,s[maxn];

int dp[2][1<>= 1;

}num[i] = cnt;

}}bool islegal(int i,int x)

int main()

getchar();

}int top = (1 << m);

if(n == 1) + cannum[i]

cannum[i]表示dfs預處理得出的第i個狀態對應的編號

剩下的,就跟揹包的更新極為類似了。

*/#include#include#define compatible(a,b) (((a)&(b))==0)

#define mn 110

#define ms 61

#define mm 11

/*dfs函式和它用到的全域性變數

dfs函式,用於打錶出每行m個位置時

各種可行的狀態,數字為為1表示是炮*/

int canstate[ms];

int cannum[ms];

int len;

int hillp;

void dfs(int loc,int num,int m);

/******************************/

/*input函式和它用到的全域性變數

此函式功能為,輸入資料,並處理

得到各層的hill,數字為1表示此位置不能放炮*/

char coteau[mn][mm];

int hill[mn];

void input(int n,int m);

/*****************************/

/*dpsolve函式和它所用到的全域性變數

該函式功能是利用動態規劃,計算出各層

各狀態中,最多能放多少炮*/

int dpamount[mn][ms][ms];

bool dpvisit[mn][ms];

void dpsolve(int n,int m);

/*************************/

int findmx(int n);//查詢dpamount中的最大值

int main()

return 0;

}void input(int n,int m)

hill[i]=tmp; }}

void dfs(int loc,int num,int m)

for(i=loc+3;i=0&&

compatible(canstate[i],canstate[k])&&

mx=0)}}

} }}int findmx(int n)

{ int mx=0;

int i,j,l;

for(l=1;l<=n;l++)

{ for(i=0;i

POJ1185 炮兵陣地 狀壓dp

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

POJ 1185 炮兵陣地 狀壓DP

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

POJ 1185 炮兵陣地 狀壓DP

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