POJ 1185 炮兵陣地 插頭dp

2022-08-18 07:06:11 字數 1143 閱讀 2102

題目鏈結

明明是道狀壓dp的題我為啥非要用插頭dp亂搞啊

逐行列舉,設dp[i][s]為列舉到第i個格仔時,狀態為s的情況。s為當前行上的「插頭」狀態,每兩個二進位制位表示乙個格仔,設當前格仔為(x,y),則y之前的插頭表示左插頭,y之後的插頭表示上插頭,僅當當前格仔上沒有插頭時才能夠放置炮兵。轉移的大致流程為:列舉當前狀態->判斷是否可放置炮兵->更新右插頭狀態->更新上插頭狀態。

跑的速度還可以,雖然略輸於狀壓dp。如果合法狀態數不是那麼少的話,可能會比狀壓dp要快。

1 #include2 #include3

using

namespace

std;

4 typedef long

long

ll;5

const

int n=100+10,inf=0x3f3f3f3f;6

char s[n][15];7

struct

hashmap

11void clear()

12int size()

13int& operator(int

x) 16 p[tot]=x,q[tot]=0,fa[tot]=u,nxt[tot]=hd[u],hd[u]=tot++;

17return q[tot-1

];18

}19 } dp[2

];20

intn,m;

21int

get(int s,int y)

22int set(int s,int y,int f)

23int max(int s,int y,int f)

24int sub(int s,int y)

25int put(int s,int

y) 30

void upd(int& x,int y)

31int

main() 43}

44int ans=0;45

for(int i=0; i1].size(); ++i)upd(ans,dp[(n*m)&1

].q[i]);

46 printf("

%d\n

",ans);

47return0;

48 }

poj 1185 炮兵陣地

題目鏈結 題意 在n m的網格地圖上部署炮兵部隊。地圖的每一格可能是山地 用 h 表示 也可能是平原 用 p 表示 如下圖。在每一格平原地形上最多可以布置一支炮兵部隊 山地上不能夠部署炮兵部隊 一支炮兵部隊在地圖上的攻擊範圍如圖中黑色區域所示 如果在地圖中的灰色所標識的平原上部署一支炮兵部隊,則圖中...

POJ 1185 炮兵陣地

include include include include include include include include include include include include include include define sz v int v size define rep i,n ...

POJ 1185 炮兵陣地

狀態壓縮專題第一題,自己想了很久,最終還是以別人的 為模板寫的。dp共三維,一維是行數,一維是前一行狀態,一維是前第二行狀態。ps 直接開三維太大,用s陣列記錄下所有可能出現的情況,大大減少時間和空間。include include include includeusing namespace st...