插頭dp初探 BZOJ1210 Uva1519

2021-07-10 11:01:48 字數 2231 閱讀 3546

這是乙個坑……

幾天前的考試一道插頭dp我硬生生裸狀壓寫了2個多小時然後考試掛了qaq

想學插頭dp的話還是陳丹琪的**比較好

但是要明白最重要的一點:我們每個格仔轉移完畢後他的插頭狀態是要留給後面格仔的

沒什麼好說的,注意細節

學完插頭dp分類討論什麼鬼的再也不怕了qaq

uva1519(此題可在cogs上做)

這是cdq的論問題,和hnoi2004郵遞員一樣是個入門題,這裡只放前者

#include#include#include#include#include#include#include#define ll long long

using namespace std;

const int maxs=20;

const int mod=9997;

const int maxl=3000000;

int code[maxs],x,y;

int ch[maxs],n,m;

bool a[15][15];

char s[15];

struct hashmap

++tot; next[tot]=h[now]; h[now]=tot;

as[tot]=x; val[tot]=v; return ;

} void init()

}dp[2];

ll encode()return st;

}void decode (ll st)

void ****()

void dpblock(int i,int j,int cur)

int up=code[j],left=code[j-1];

if (!up&&!left)

dp[cur^1].push(encode(),dp[cur].val[k]); }}

void dpright(int i,int j,int cur)

int up=code[j],left=code[j-1];

if (!up&&!left)else if ((!up&&left)||(up&&!left))if (a[i][j+1])

}elseelse if (up==left)

}} }

}void solve_dp()

} printf("%lld",dp[cur].val[1]);

}int main()

solve_dp();

}

bzoj1187

[hnoi2007]神奇遊樂園

沒有了壞格仔,但是我們可以在任意乙個地方結束,所以在每個地方只要上插頭左插頭都存在就可以判斷並更新答案

判斷的依據是當前輪廓線上沒有多餘插頭,否則不是標準迴路

同時因為我們並沒有要求每個格仔都經過,所以我們可以空乙個格仔不選直接進行下乙個,這種情況當且僅當左插頭和上插頭都沒有

還有就是要乙個迴路qaq,所以只要形成了乙個符合要求的標準迴路他是不會加入下乙個格仔的狀態集合進行轉移的

#include#include#include#include#define ll long long

using namespace std;

const int mod=1331;

const int maxl=1000000+10;

const ll inf=1e15;

ll ans=-inf;

int code[15],ch[15],n,m;

int a[110][110];

struct hashmap

++tot; next[tot]=h[now]; h[now]=tot;

as[tot]=x; val[tot]=v; return ;

}void init()

}dp[2];

ll encode()return st;

}void decode (ll st)

void ****()

void dpright(int i,int j,int cur)

int up=code[j],left=code[j-1];

if (!up&&!left)else if ((!up&&left)||(up&&!left))if (j+1<=m)

}elseelse if (up==left)}}

}void solve_dp()

}printf("%lld",ans);

}int main()

插頭DP 入門

強烈推薦 hdu 1693 eat the trees 多迴路的不用判聯通狀態,二進位制即可,轉移情況2 2種。時間o n m 2 n 空間o n 2 n 插頭dp include include const int maxm 13 const int maxn 1 12 typedef long ...

插頭Dp總結

題目大意 給出n m的方格,有些格仔不能鋪線,其它格仔必須鋪,可以形成多個閉合迴路。問有多少種鋪法?插頭dp板子題,題目要求可以是多個迴路,只需要兩個狀態,代表是否有插頭即可 plug 1 plug 2 0 0 新建乙個插頭插向兩邊 0 1 轉 不轉彎 1 0 同上 1 1 合併插頭 題目大意 乙個...

總結 插頭 dp

集中做完了插頭 dp 寫一下題解。一開始學的時候還是挺矇的。不過後來站在輪廓線 dp 的角度上來看就簡單多了。其實就是一種聯通性 dp 只不過情況比較多而已了。本來轉移方式有兩種。逐行和逐格轉移。不過逐行轉移因為分類太多所以被捨棄了。一般的插頭 dp 採用逐格轉移。插頭表示已經進入當前格仔的狀態,而...