POJ 1737 经典DP
问题:求含有n个点的连通图的个数。
解:
考虑DP,$f(n)$表示n个点,每个点都和点1相连,且n个点互相连通的图的个数。
(蓝字非常重要,这个条件有效地避免了重复计算)
$g(n)$表示n个点,每个点都和点1相连,且不是n个点互相连通的图的个数。
$S(n)$表示n个点的图的个数。
显然,有:$f(n) = S(n)-g(n)$
$S(n) = 2^{n(n-1)/2}$
而且有(关键):$g(n) = \sum_{i=1}^{n-1}{C_{n-1}^{i-1} * f(i) * S(n-i)}$
从除了1之外的n-1个点中选出i-1个点,让这i个点互相连通,而剩下的n-i个点和这i个点没有边相连,互相之间随意连接。
当然,博主并不想写高精度
#include <iostream>
#include <cstring>
#include <algorithm> #define LL long long
#define N 61 using namespace std; LL f[N],g[N];
LL C[N][N];
const int n=; LL S(int x){
if(x==) return ;
return (1LL<<( (x*(x-)) /));
} int main(){
f[]=; g[]=;
C[][]=;
for(int i=;i<=n;i++){
C[i][]=;
for(int j=;j<=i;j++)
C[i][j]=C[i-][j-]+C[i-][j];
}
for(int i=;i<=n;i++){
g[i]=;
for(int j=;j<i;j++)
g[i] = g[i] + (C[i-][j-]*f[j]*S(i-j));
f[i]=S(i)-g[i];
}
int x;
while(cin>>x,x) cout<<f[x]<<endl;
return ;
}
接下来是多校联盟中有关于本题的拓展:
问题:求左侧n个点,右侧m个点的联通二分图个数
解:参照上面的解法。
$f(i,j)$表示左面i个点右面j个点,每个点都和左面的点1相连,且n个点互相连通的图的个数。
$g(i,j)$表示左面i个点右面j个点,每个点都和左面的点1相连,且n个点不是互相连通的图的个数。
$S(i,j)$定义类比上面。
和上面一样的,有:
$f(n,m)=S(n,m)-g(n,m)$
$S(n,m)=2^{nm}$
$g(n,m)=\sum_{r=1}^{n-1}{ \sum_{s=1}^{m-1}{ C_{n-1}^{r-1}*C_{m}^{s}*f(r,s)*S(n-r,m-s) } }$
POJ 1737 经典DP的更多相关文章
- POJ 1141 经典DP 轨迹打印
又几天没写博客了,大二的生活实在好忙碌啊,开了五门专业课,每周都是实验啊实验啊实验啊....我说要本月刷够60题,但好像完不成了,也就每天1题的样子.如今写动规还是挺有条理的,包括这道需要打印轨迹,其 ...
- poj 1050 To the Max 最大子矩阵和 经典dp
To the Max Description Given a two-dimensional array of positive and negative integers, a sub-rect ...
- POJ 1160:Post Office 邮局经典DP
Post Office Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17168 Accepted: 9270 Desc ...
- poj 1737 Connected Graph
// poj 1737 Connected Graph // // 题目大意: // // 带标号的连通分量计数 // // 解题思路: // // 设f(n)为连通图的数量,g(n)为非连通图的数量 ...
- HDU 1003 Max Sum --- 经典DP
HDU 1003 相关链接 HDU 1231题解 题目大意:给定序列个数n及n个数,求该序列的最大连续子序列的和,要求输出最大连续子序列的和以及子序列的首位位置 解题思路:经典DP,可以定义 ...
- poj1458 求最长公共子序列 经典DP
Common Subsequence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 45763 Accepted: 18 ...
- NYOJ - 矩形嵌套(经典dp)
矩形嵌套时间限制:3000 ms | 内存限制:65535 KB 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b< ...
- 51nod 1412 AVL树的种类(经典dp)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1412 题意: 思路: 经典dp!!!可惜我想不到!! $dp[i][k] ...
- NYOJ 16 矩形嵌套(经典DP)
http://acm.nyist.net/JudgeOnline/problem.php?pid=16 矩形嵌套 时间限制:3000 ms | 内存限制:65535 KB 难度: ...
随机推荐
- POJ 题目3450 Corporate Identity(KMP 暴力)
Corporate Identity Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 5493 Accepted: 201 ...
- 在chrome中屏蔽百度推荐
在chrome中屏蔽百度推荐 方法1:可以使用adblock plus来进行屏蔽: 需要将chrome的扩展程序打开为调试者模式: 下载地址:http://chromecj.com/productiv ...
- sql查询语句整理
首先这是我以下语句查询的一个表结构 t_user插入例如以下数据 t_depart中插入例如以下数据 t_role插入例如以下数据 好,建好表后,我们開始数据库查询语句 简单的查询语句 1. 查看表结 ...
- hdu 1710 Binary Tree Traversals 前序遍历和中序推后序
题链;http://acm.hdu.edu.cn/showproblem.php?pid=1710 Binary Tree Traversals Time Limit: 1000/1000 MS (J ...
- Our happy ending
题目链接 题意: 输入n.k.L,n个数,最大值不超过L,在序列中取若干个数和能达到k的序列个数 n,k<=20 , 0<=L<=10^9 分析: 题目关键在于和k比較小,所以能够考 ...
- android 4.4以上能够实现的沉浸式状态栏效果
仅仅有android4.4以及以上的版本号才支持状态栏沉浸效果 先把程序执行在4.4下面的手机上,看下效果: 在4.4以上的效果: watermark/2/text/aHR0cDovL2Jsb2cuY ...
- 如何快速上手一款新的嵌入式CPU芯片(记录CC2540开发经历)
新换了工作,需要熟悉新公司的产品开发项目,更新博客就懈怠了,不过环境的不同,也让我对嵌入式开发有了更深刻的理解.在原公司我主要负责在STM32F207芯片平台上, 利用UCOS+LWIP进行嵌入式服务 ...
- C# -- 推断字符能否转化为整形
int iNum = 0; string sNumber = "1003"; int iResult = 0; int.TryParse(sNumber, out iResult) ...
- C++ primer 模板与泛型编程
继续浏览c++ primer 看到模板与泛型编程这章.就顺便把这几节的代码综合了下,对一个Queue队列模板的实现 贴一下代码(看完书.自己敲,忘记了哪再看下书) #include <ostre ...
- angularJS---自己定义过滤器
AngularJS还有一个特点就是提供了过滤器.能够通过操作UNIX下管道的方式,操作数据结果. 通过使用管道.能够便于双向的数据绑定中视图的展现. 过滤器在处理过程中,将数据变成新的格式.并且能够使 ...