HDU5729 2016 Multi-University Training Contest 1 (dp+连通图)
2016-07-20 18:01
471 查看
#include<iostream> #include<cstdio> using namespace std; const int mod=1e9+7; long long c[105][105],dp[15][15][105],pow2[105]; void init() { pow2[0]=c[0][0]=1; for(int i=1;i<=100;i++) { pow2[i]=(pow2[i-1]*2)%mod; c[i][0]=c[i][i]=1; for(int j=1;j<i;j++) c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod; } dp[0][0][0]=dp[0][1][0]=dp[1][0][0]=1; for(int i=1;i<=10;i++) for(int j=1;j<=10;j++) { if(i==1||j==1) { dp[i][j][i+j-1]=1; continue; } for(int k=1;k<=i*j;k++) { dp[i][j][k]=c[i*j][k]; for(int ii=0;ii<=i;ii++) for(int jj=1;jj<=j;jj++) { if (i + j == ii + jj) continue; for(int kk=0;kk<=k;kk++) { long long temp=c[i][ii]*c[j-1][jj-1]%mod; temp = temp*dp[ii][jj][kk] % mod; temp = temp*c[(i-ii)*(j-jj)][k-kk]; dp[i][j][k]=((dp[i][j][k]-temp)%mod+mod)%mod; } } } } } int main() { int n,m; init(); while(scanf("%d %d",&n,&m)!=EOF) { long long ans=0; for(int i=0;i<=n*m;i++) { ans=(ans+dp [m][i]*pow2[i])%mod; } printf("%lld\n",ans); } return 0; }
相关文章推荐
- Ajax请求response下显示failed to load response data
- 绘制基础知识-canvas paint
- ARC forbids explicit message send of 'release' 'release' is unavailable: not available in automatic
- soft raid5阅读笔记之四--读成员磁盘错误的处理
- soft raid5阅读笔记之三--写数据流程
- soft raid5阅读笔记之二--读数据流程
- 【杭电-oj】-1022-Train Problem I (栈,好)
- 项目运行时,直接在main.m停住
- rails常用语法
- translatesAutoresizingMaskIntoConstraints
- 2016 Multi-University Training Contest 1 1005 Necklace
- poj2387(堆优化dijiskla模版,通过pair写的)
- AIDL的实现
- 最小生成树+DFS求任意两点间平均路径长度 ——Abandoned country (HDU 5732)( 2016Multi-University Training Contest 1 1001 )
- UVa 11733 - Airports
- 2016 Multi-University Training Contest 1 T4
- leetcode Container with most Water
- HDU5723 2016 Multi-University Training Contest 1 (最小生成树+dfs)
- 2016 Multi-University Training Contest 1 1007 Rigid Frameworks
- 2016 Multi-University Training Contest 1 1002 hdu 5724 博弈