[HDU 5731]Solid Dominoes Tilings:状压DP+容斥原理
来源:互联网 发布:东莞市知美整形医院 编辑:程序博客网 时间:2024/06/08 11:04
点击这里查看原题
这题是POJ 2411的升级版。dp[i][j]表示长为i宽为j的方案数,打个表预处理一下。然后枚举列的切割方案,因为一共有m-1条竖线,因此有2^(m-1)种情况。cnt[i]表示按当前的列分割方案,宽为i的矩形的方案数,f[i]表示在当前列分割情况下,前i行的情况数,f[i]=cnt[i]-sigma{f[j]*cnt[i-j]}( 0 < j < i )
/*User:SmallLanguage:C++Problem No.:5731*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const ll mod=1e9+7;ll dp[17][17]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,0,0,3,0,11,0,41,0,153,0,571,0,2131,0,7953,0,29681,0,1,5,11,36,95,281,781,2245,6336,18061,51205,145601,413351,1174500,3335651,9475901,0,0,8,0,95,0,1183,0,14824,0,185921,0,2332097,0,29253160,0,366944287,0,1,13,41,281,1183,6728,31529,167089,817991,4213133,21001799,106912793,536948224,720246619,704300462,289288426,0,0,21,0,781,0,31529,0,1292697,0,53175517,0,188978103,0,124166811,0,708175999,0,1,34,153,2245,14824,167089,1292697,12988816,108435745,31151234,940739768,741005255,164248716,498190405,200052235,282756494,0,0,55,0,6336,0,817991,0,108435745,0,479521663,0,528655152,0,764896039,0,416579196,0,1,89,571,18061,185921,4213133,53175517,31151234,479521663,584044562,472546535,732130620,186229290,274787842,732073997,320338127,0,0,144,0,51205,0,21001799,0,940739768,0,472546535,0,177126748,0,513673802,0,881924366,0,1,233,2131,145601,2332097,106912793,188978103,741005255,528655152,732130620,177126748,150536661,389322891,371114062,65334618,119004311,0,0,377,0,413351,0,536948224,0,164248716,0,186229290,0,389322891,0,351258337,0,144590622,0,1,610,7953,1174500,29253160,720246619,124166811,498190405,764896039,274787842,513673802,371114062,351258337,722065660,236847118,451896972,0,0,987,0,3335651,0,704300462,0,200052235,0,732073997,0,65334618,0,236847118,0,974417347,0,1,1597,29681,9475901,366944287,289288426,708175999,282756494,416579196,320338127,881924366,119004311,144590622,451896972,974417347,378503901};ll f[17];int b[20],cnt,siz,n,m;ll solve(int n,int m){ ll res=0; for(int i=0;i<(1<<m-1);i++){ cnt=siz=0; for(int j=0;j<m-1;j++){ siz++; if(i>>j&1){ b[++cnt]=siz; siz=0; } } b[++cnt]=++siz; for(int j=1;j<=n;j++){ for(int k=0;k<j;k++){ ll tmp=1; for(int t=1;t<=cnt;t++) tmp=tmp*dp[b[t]][j-k]%mod; if(!k) f[j]=tmp; else f[j]=((f[j]-f[k]*tmp%mod)%mod+mod)%mod; } } if(!(cnt&1)) res=((res-f[n])%mod+mod)%mod; else res=(res+f[n])%mod; } return res;}int main(){ freopen("data.in","r",stdin);// ios::sync_with_stdio(false); while(cin>>n>>m) cout<<solve(n,m)<<endl; return 0;}
0 0
- [HDU 5731]Solid Dominoes Tilings:状压DP+容斥原理
- hdu 5731 Solid Dominoes Tilings 插头dp+容斥原理
- 【多校】hdu 5731 Solid Dominoes Tilings 状压dp+容斥
- [HDU 5731] Solid Dominoes Tilings (轮廓线DP+容斥定理)
- HDU 5731 Solid Dominoes Tilings(轮廓线DP+容斥)
- HDU 5731 Solid Dominoes Tilings(轮廓线DP+容斥)
- Hdu 5731 Solid Dominoes Tilings
- hdu 5731 Solid Dominoes Tilings(多米诺骨牌)
- 【HDU5731 2016 Multi-University Training Contest 1I】【轮廓线DP+容斥】Solid Dominoes Tilings nm棋盘1x2多边形填充稳定方案
- hdu5731Solid Dominoes Tilings
- CodeForces 342D Xenia and Dominoes 【DP+容斥】
- bzoj 3812 状压dp 容斥原理
- bzoj 2669 状压dp 容斥原理
- HDU 4336 概率DP求期望(or容斥原理)
- hdu 4336 Card Collector (期望dp|容斥原理)
- HDU 4336 概率dp或者容斥原理
- hdu 4336 Card Collector(概率dp, 容斥原理)
- HDU 4336 Card Collector (容斥原理||概率DP)
- C++杂记2
- 操作系统原理读书笔记之进程同步
- [NOI2014] BZOJ 3671 随机数据生成器-贪心
- 图像处理之_聚焦效果LogPolar
- 【Python】记录程序运行时间
- [HDU 5731]Solid Dominoes Tilings:状压DP+容斥原理
- GET和POST的区别,何时使用POST?
- xsehll不能删除字符的解决方案
- 请解释一下 JavaScript 的同源策略
- Hadoop 学习笔记八 任务远程提交--Java远程提交
- 函数可变参数列简单用法
- QT对话框中show和exec的区别
- C++之命名空间
- 编写MATLAB脚本产生正弦信号的mif文件