P5056 模板 插頭dp

2022-09-14 15:03:12 字數 994 閱讀 4370

\(n*m\)的網格,求有多少條迴路可以鋪滿整個棋盤。

插頭\(dp\)的,寫法是按照題解上的寫法。

狀態用的是括號匹配,然後用了雜湊+鄰接表(掛表)還有滾動陣列優化空間

然後可以看題解學

#include#include#includeusing namespace std;

const int p=133331;

struct nodea[p*2];

int n,m,o,tot,zx,zy,t[2],bit[25],ls[p],s[2][p],v[25][25];

long long ans,dp[2][p];

char st[25];

void add(int s,long long v)

t[o]++;dp[o][t[o]]=v;s[o][t[o]]=s;

a[++tot].to=t[o];a[tot].next=ls[x];ls[x]=tot;

return;

}int main()

} for(int i=0;i<=12;i++)bit[i]=(1<<(i<<1));

t[o]=1;s[o][1]=0;dp[o][1]=1;

for(int i=1;i<=n;i++)

else if(!dpl && !rpl)

else if(!dpl && rpl)

else if(dpl && !rpl)

else if(dpl==1&&rpl==1)}}

else if(dpl==2&&rpl==2)}}

else if(dpl==1&&rpl==2)

add(s-2*bit[j-1]-bit[j],w);

else if(dpl==2&&rpl==1)

if(i==zx&&j==zy)ans+=w;

}} }

printf("%lld\n",ans);

return 0;

}

P5056 模板 插頭dp

插頭dp的模板 插頭dp括號序列的方法其實就是利用迴路不能交叉匹配,必定兩兩配對的性質通過括號序列描述了連通塊的匹配關係 注意分類討論 判斷狀態合法 最邊上一圈不能有插頭延伸過去,要注意 include include include define int long long using names...

P5056 模板 插頭dp

給出n m的方格,有些格仔不能鋪線,其它格仔必須鋪,形成乙個閉合迴路。問有多少種鋪法?第1行,n,m 2 n,m 12 從第2行到第n 1行,每行一段字串 m個字元 表不能鋪線,表必須鋪 輸出乙個整數,表示總方案數 4 4 2none 插頭dp本來以為多niubility的演算法原來本質還是個dp,...

洛谷 P5056 模板 插頭dp

題目鏈結 題意 給出n m的方格,有些格仔不能鋪線,其它格仔必須鋪,形成乙個閉合迴路。問有多少種鋪法?思路比賽時基本做不出來,就學個新演算法玩玩。學習鏈結 對於我這個不會hash table 的不太友好,先自己封裝了乙個用著舒服的hash table,當然也可以直接用stl裡的unordered m...