原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1634.html

题目传送门 - 51Nod1634

题意

基准时间限制:1 秒 空间限制:131072 KB 分值: 640 难度:8级算法题
计算机科学中,图可以看做是点集和边集所组成的二元组。

通过给每个点设置一个平面坐标,图可以镶嵌在欧几里得平面中。
 
 
一个图被认为是刚体,如果该图无法只改变其中一部分的形状,而使得余下的部分的形状保持不变。
例如上图中的 (a) (b) (c) 都是刚体。
 
为了简化问题,我们现在只考虑  n × m 的格点图。
上图不是刚体,但是可以通过在对角线加入支撑的方式使得其变为刚体。

我们的问题是,对于 m × n 的个点图,有多少种添加支撑的方案可以使其变为刚体?
注意本题在每个小矩形中,我们至多只允许添加一个方向的对角线。
例如,对于 2 × 3 的格点图,一共有 448 种方案。

题解

  考虑到加一条斜着的边的作用是让一个格子的行和列垂直。

  我们需要让所有的行和列都互相垂直。于是,只要我们建一个二分图,行和列分居两侧,问题就被转化成了统计连通的二分图个数,其中,一条边有两种连接的方式。

  令 $dp_{i,j}$ 表示左边有 $i$ 个,右边有 $j$ 个节点 的连通二分图个数,于是我们需要补集转化一下,得到:

$$dp_{n,m}=3^{nm}-\sum_{i=1}^{n}\sum_{j=0}^{m}[i\neq n\ {\rm OR}\ j\neq m] \binom{n-1}{i-1}\binom{m}{j}\cdot 3^{(n-i)(m-j)}dp_{i,j}$$

  这里略微的解释一下意义。我们枚举第一个节点所在的连通块的左右部分点的个数,然后剩余的边可以随意连,所以有一个 $3^{(n-i)(m-j)}$ 。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=15,mod=1e9+7;
int C[N][N],Pow3[N*N],dp[N][N];
int main(){
for (int i=0;i<N;i++)
C[i][0]=C[i][i]=1;
for (int i=1;i<N;i++)
for (int j=1;j<i;j++)
C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;
Pow3[0]=1;
for (int i=1;i<N*N;i++)
Pow3[i]=3LL*Pow3[i-1]%mod;
memset(dp,0,sizeof dp);
dp[0][1]=dp[1][0]=1;
for (int n=1;n<N;n++)
for (int m=1;m<N;m++){
dp[n][m]=Pow3[n*m];
for (int i=1;i<=n;i++)
for (int j=0;j<=m;j++)
if (i!=n||j!=m)
dp[n][m]=(-1LL*C[n-1][i-1]*C[m][j]%mod
*Pow3[(n-i)*(m-j)]%mod*dp[i][j]%mod
+dp[n][m])%mod;
dp[n][m]=(dp[n][m]+mod)%mod;
}
int n,m;
while (~scanf("%d%d",&n,&m))
printf("%d\n",dp[n][m]);
return 0;
}

  

51Nod1634 刚体图 动态规划 容斥原理 排列组合的更多相关文章

  1. 【BZOJ 3505】 [Cqoi2014]数三角形 容斥原理+排列组合+GCD

    我们先把所有三角形用排列组合算出来,再把一行一列上的三点共线减去,然后我们只观察向右上的三点共线,向左上的乘二即可,我们发现我们如果枚举所有的两边点再乘中间点的个数(GCD),那么我们发现所有的两边点 ...

  2. 排列组合或容斥原理 SPOJ - AMR11H

    题目链接: https://vjudge.net/contest/237052#problem/H 这里给你一串数字,让你计算同时拥有这串数字最大值和最小值的子集(连续)和子序列(可以不连续)的数量, ...

  3. 【专题】计数问题(排列组合,容斥原理,Prufer序列)

    [容斥原理] 对于统计指定排列方案数的问题,一个方案是空间中的一个元素. 定义集合x是满足排列中第x个数的限定条件的方案集合,设排列长度为S,则一共S个集合. 容斥原理的本质是考虑[集合交 或 集合交 ...

  4. 【CodeForces】914 H. Ember and Storm's Tree Game 动态规划+排列组合

    [题目]H. Ember and Storm's Tree Game [题意]Zsnuoの博客 [算法]动态规划+排列组合 [题解]题目本身其实并不难,但是大量干扰因素让题目显得很神秘. 参考:Zsn ...

  5. 【CodeForces】889 C. Maximum Element 排列组合+动态规划

    [题目]C. Maximum Element [题意]给定n和k,定义一个排列是好的当且仅当存在一个位置i,满足对于所有的j=[1,i-1]&&[i+1,i+k]有a[i]>a[ ...

  6. [Codeforces 1228E]Another Filling the Grid (排列组合+容斥原理)

    [Codeforces 1228E]Another Filling the Grid (排列组合+容斥原理) 题面 一个\(n \times n\)的格子,每个格子里可以填\([1,k]\)内的整数. ...

  7. [Codeforces 997C]Sky Full of Stars(排列组合+容斥原理)

    [Codeforces 997C]Sky Full of Stars(排列组合+容斥原理) 题面 用3种颜色对\(n×n\)的格子染色,问至少有一行或一列只有一种颜色的方案数.\((n≤10^6)\) ...

  8. HDU 4497 GCD and LCM(分解质因子+排列组合)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4497 题意:已知GCD(x, y, z) = G,LCM(x, y, z) = L.告诉你G.L,求满 ...

  9. 数组排列组合问题——BACKTRACKING

    BACKTRACKING backtracking(回溯法)是一类递归算法,通常用于解决某类问题:要求找出答案空间中符合某种特定要求的答案,比如eight queens puzzle(将国际象棋的八个 ...

随机推荐

  1. OpenVPN安装过程记录

    1.参考网上OpenVPN 的安装步骤进行安装,此处省略. 2.安装完后进行相应证书和密钥的生成. 3.启动openvpn,查看 netstat -tunlp ,如果有openvpn 1194的监听, ...

  2. 最新版Kali Linux虚拟机安装Open-vm-tools替代VMware tools

    自从Kali 2.0发布之后,会经常遇到安装vmware tools无法成功,或者提示安装成功了但是仍旧无法进行文件拖拽.复制和剪切的问题. 今天给新电脑装系统,重新下载了最新版,Kali 2017. ...

  3. UVA 1395 MST

    给你一个图, 求一个生成树, 边权Max – Min 要最小,输出最小值, 不能构成生成树的 输出 -1: 思路: Keuksal 算法, 先排序边, 然后枚举 第一条边, 往后加入边, 直到有 n- ...

  4. sublime text3 golang插件(golang build)

    1 前言 先前条件: sublime text3:下载地址:http://www.sublimetext.com/3 golang:下载地址:https://golang.google.cn/dl/ ...

  5. [PHP]命名空间的一些要点

    1.命名空间前不能接"\": namespace MyProject\Sub\Level; // it's right; namespace \MyProject\Sub\Leve ...

  6. HashMap遍历的两种方式,推荐使用entrySet()

    第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) {    ...

  7. Confluence 6 重新获得站点备份文件

    Confluence 将会创建备份,同时压缩 XML 文件后存储熬你的 <home-directory>/backups> 目录中.你需要自己访问你安装的 Confluence 服务 ...

  8. 暑假里的第八篇Java

    日期:2018.9.1 博客期:008 星期六 这几天刚到学校,Java方面写的少了!目前在做老师头放假前发布的那一套题目,就是哪个Java程序测试卷.至于自己能不能都做出来我自己心里十分清楚!今天就 ...

  9. Tomcat解决中文乱码并部署项目

    1.在Tomcat下的server.xml中添加URIEncoding="UTF-8"(解决中文乱码的问题) 2.在Tomcat下的server.xml中添加<Context ...

  10. 【sqli-labs】Less18~Less22

    Less18: User-Agent注入,有错误回显 感叹一句,越来越难了.现在只能先看代码再分析怎么注入了..... 通过代码,发现username和password均做了校验.但是会有一个插入us ...