\(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...