[HDU 5729] Rigid Frameworks (二分图联通方案计数)
2016-07-24 09:02
197 查看
HDU - 5729
给定一个 N*M的矩形格子,问在一个格子里只添加一条斜线,将整个图形变成一个刚性的图形的方案数有多少种
根据 Project Euler 434,问题可以转化为
一个左边有 N个点,右边有 M个点的二分图的联通方案计数
首先对于一个 N∗M的格子图,每个格子要么不加,
要么向左加一条斜线,要么向右加一条斜线,所以总方案数 2N∗M
接下来扣去其中不合法的方案数
设 dp[n][m]为左边 n个点,右边 m个点的方案数
对于左边的某一个点(不妨设为 1号点),
如果它不与图中其他所有点同在一个联通分量,那么就是不合法的
设从左边选 i个点,右边选 j个点与 1在同一个联通分量
剩下的 n−1−i与 m−j个点随意连接
方案数为 C(n−1,i)∗C(m,j)∗dp[i+1][j]∗3(n−1−i)∗(m−j)
所以枚举 i和 j减去即可
dpn,m=3n∗m−∑i=0,j=0i<=n−1,j<=mCin−1∗Cjm∗dpi+1.j∗3(n−1−i)∗(m−j)
#pragma comment(linker, "/STACK:102400000,102400000") #include <cstdio> #include <iostream> #include <cstdlib> #include <cstring> #include <algorithm> #include <cmath> #include <cctype> #include <map> #include <set> #include <queue> #include <bitset> using namespace std; typedef pair<int,int> Pii; typedef long long LL; typedef unsigned long long ULL; typedef double DBL; typedef long double LDBL; #define MST(a,b) memset(a,b,sizeof(a)) #define CLR(a) MST(a,0) #define SQR(a) ((a)*(a)) #define PCUT puts("----------") const int MOD=1e9+7; int N,M; LL dp[20][20]; LL pow3[110]; LL C[20][20]; int main() { #ifdef LOCAL freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); #endif pow3[0]=1; for(int i=1; i<=100; i++) pow3[i] = pow3[i-1]*3%MOD; for(int i=0; i<=10; i++) { C[i][0]=1; for(int j=1; j<=i; j++) C[i][j] = (C[i-1][j] + C[i-1][j-1])%MOD; } for(int n=0; n<=10; n++) for(int m=0; m<=10; m++) { dp [m] = pow3[n*m]; for(int i=0; i<=n-1; i++) { for(int j=0; j<=m; j++) { if(i==n-1 && j==m) break; dp [m] = (dp [m] - C[n-1][i]*C[m][j]%MOD * pow3[(n-1-i)*(m-j)]%MOD * dp[i+1][j] )%MOD; } } dp [m] = (dp [m]+MOD)%MOD; } while(~scanf("%d%d", &N, &M)) printf("%lld\n", dp [M]); return 0; }
相关文章推荐
- ArrayList中的add(index, element)方法分析
- OpenCV+Visual Studio 2010、2012、2013、2015
- 【Coursera】Fourth Week(1)
- CodeForces 616A Comparing Two Long Integers
- Git使用教程
- linux服务器出现大量TIME_WAIT的解决方法
- poj 3468 线段树区间更新
- 防止表单重复提交
- c++
- Prime Ring Problem
- 【VS开发】免费打工仔:一个完善的ActiveX Web控件教程
- hdu 1112
- AT24C512与AT24C512B的区别
- POJ 3620 Avoid The Lakes(DFS)
- N皇后
- 让键盘不占空间和关闭软键盘的方法
- 【图像处理】ISP 图像传感器camera原理
- 前端基础问题整理-JavaScript相关(一)
- Python 3.4 链接mysql5.7 数据库使用方法
- mysql字符串拼接,存储过程