HDU 5729 Rigid Frameworks
2016-07-22 13:08
246 查看
目前还是不能彻底理解这题......
将题意转化成求左边n个点,右边m个点的二分图有几种不同的连边方式将它连通。每条边可以有三种状态(即不选,选红,选蓝,选红选蓝都可以连通,但算两种状态)。
看着这博客学的....http://blog.csdn.net/dpppbr/article/details/51972196
将题意转化成求左边n个点,右边m个点的二分图有几种不同的连边方式将它连通。每条边可以有三种状态(即不选,选红,选蓝,选红选蓝都可以连通,但算两种状态)。
看着这博客学的....http://blog.csdn.net/dpppbr/article/details/51972196
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<map> #include<set> #include<queue> #include<stack> #include<iostream> using namespace std; typedef long long LL; LL mod=1e9+7; LL dp[15][15],c[15][15],h[120]; LL MOD(LL x) { while(x<0) x=x+mod; return x%mod; } void pre() { for(int i=0;i<=10;i++) c[i][0]=1; for(int i=1;i<=10;i++) for(int j=1;j<=10;j++) c[i][j]=c[i-1][j-1]+c[i-1][j]; h[0]=1; for(int i=1;i<=100;i++) h[i]=(3*h[i-1])%mod; memset(dp,0,sizeof dp); dp[1][0]=1; for(int i=1;i<=10;i++) { for(int j=0;j<=10;j++) { dp[i][j]=h[i*j]; for(int k=1;k<=i;k++) { for(int s=0;s<=j;s++) { if(i==k&&j==s) continue; LL x=c[i-1][k-1]*c[j][s]%mod; x=x*dp[k][s]%mod; x=x*h[(i-k)*(j-s)]%mod; dp[i][j]=MOD(dp[i][j]-x); } } } } } int main() { pre(); int u,v; while(~scanf("%d%d",&u,&v)) printf("%lld\n",dp[u][v]); return 0; }
相关文章推荐
- Javascript面试题
- java统计abacbacdadbc中的每个字母出现的次数,输出格式是:a(4)b(3)c(3)d(2) (未测试)
- hdu5745 La Vie en rose dp+bitset优化
- Kibana更改使用高德地图
- JavaScript动画 —— 弹动动画 (未测试)
- 求出当前日期距离上一个指定日期的月数天数
- Myeclipse学习总结(8)——Eclipse实用操作
- Myeclipse学习总结(8)——Eclipse实用操作
- Linux 下 命令行 mail 发邮件方法(未测试)
- PHP 计算Date类型的差值
- jmeter分布式测试部署
- spring jdbcTemplate 插入对象返回主键值 (未测试)
- Saving HDU hd 2111
- css input[type=file] 样式美化,input上传按钮美化
- windows 对话框程序实践(1)
- java全排列通用工具类(未测试)
- Mysql计算时间差函数
- js获取页面及个元素高度、宽度
- OSX 安装MongoDB
- AS设置及快捷键收集整理