poj 1737男人八题之一 orz ltc
这是楼教主的男人八题之一。很高兴我能做八分之一的男人了。
题目大意:求有n个顶点的连通图有多少个。
解法:
1、 用总数减去不联通的图(网上说可以,我觉得时间悬)
2、 用动态规划(数学递推)。网上讲的方法我觉得非常难懂,但好像也没有更好的表示。我就说一下吧:
用dp[i]表示i个顶点时的连通图的总数。
考虑将1号点去除后,2号点所在的联通块。设此联通块有k个点,则这块共有C(n-2,k-1)种取法。
回过头来看刚开始的图。可以把图分成两块,一是上述联通块,其余的另一块(此块也一定联通),这两块之间至少有一条连线,而这些线段肯定有一个顶点是1号点(用反证法很容易得到)。K个顶点连线到1号点的情况总共有2^k种,去除一种都不连的情况,还剩(2^k)-1种。故此时共有dp[j]*dp[i-j]*((2^k)-1)*C(n-2,k-1)
综上,dp[i]=sigma{ dp[j]*dp[i-j]*((2^k)-1)*C(n-2,k-1)} (1<=j<i)
最后提醒一句,虽然大家都知道:要用高精度
代码:
#include<cstdio>
#include<cstring>
using namespace std;
int max(int x,int y){
return(x>y)?x:y;
}
struct bign{
int len,p[240];
bign(){
len=1;
memset(p,0,sizeof(p));
}
bign operator =(const bign &o){
len=o.len;
memcpy(p,o.p,sizeof(p));
return *this;
}
bign operator +(const bign &o){
bign ans;
ans.len=max(len,o.len)+1;
int g=0;
for(int i=0;i<ans.len;i++){
int x=p[i]+o.p[i]+g;
ans.p[i]=x%10000;
g=x/10000;
}
if(ans.p[ans.len-1]==0)ans.len--;
return ans;
}
bign operator *(const bign &o){
bign ans;
ans.len=len+o.len;
for(int i=0;i<len;i++)
for(int j=0;j<o.len;j++){
ans.p[i+j]+=p[i]*o.p[j];
ans.p[i+j+1]+=ans.p[i+j]/10000;
ans.p[i+j]%=10000;
}
while(ans.p[ans.len-1]==0)ans.len--;
return ans;
}
void print(){
printf("%d",p[len-1]);
for(int i=len-2;i>=0;i--){
if(p[i]<10)printf("000%d",p[i]);
if(p[i]>=10 && p[i]<100)printf("00%d",p[i]);
if(p[i]>=100 && p[i]<1000)printf("0%d",p[i]);
if(p[i]>=1000 && p[i]<10000)printf("%d",p[i]);
}
printf("\n");
return;
}
}dp[51],tmp,c[51][51],two[51];
void init(bign &x){
x.len=1;
memset(x.p,0,sizeof(x.p));
x.p[0]=1;
return;
}
int main(){
int n;
scanf("%d",&n);
init(two[0]);
for(int i=1;i<=50;i++)
two[i]=two[i-1]+two[i-1];
for(int i=0;i<=50;i++)
two[i].p[0]--;
init(c[0][0]);
for(int i=1;i<=50;i++){
init(c[i][0]);init(c[i][i]);
for(int j=1;j<i;j++)
c[i][j]=c[i-1][j]+c[i-1][j-1];
}
init(dp[2]);init(dp[1]);
for(int i=3;i<=50;i++){
for(int j=1;j<i;j++)
dp[i]=dp[i]+dp[j]*dp[i-j]*two[j]*c[i-2][j-1];
}
while(n!=0){
dp[n].print();
scanf("%d",&n);
}
return 0;
}
poj 1737男人八题之一 orz ltc的更多相关文章
- poj 1743 男人八题之后缀数组求最长不可重叠最长重复子串
Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 14874 Accepted: 5118 De ...
- poj 1741 楼教主男人八题之中的一个:树分治
http://poj.org/problem? id=1741 Description Give a tree with n vertices,each edge has a length(posit ...
- POJ1742 Coins(男人八题之一)
前言 大名鼎鼎的男人八题,终于见识了... 题面 http://poj.org/problem?id=1742 分析 § 1 多重背包 这很显然是一个完全背包问题,考虑转移方程: DP[i][j]表示 ...
- Cogs 1714. [POJ1741][男人八题]树上的点对(点分治)
[POJ1741][男人八题]树上的点对 ★★★ 输入文件:poj1741_tree.in 输出文件:poj1741_tree.out 简单对比 时间限制:1 s 内存限制:256 MB [题目描述] ...
- poj 1742(好题,楼天城男人八题,混合背包)
Coins Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 33269 Accepted: 11295 Descripti ...
- 博弈论(男人八题):POJ 1740 A New Stone Game
A New Stone Game Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 5694 Accepted: 3119 ...
- 新男人八题---AStringGame
终于完成进度男人1/8,为了这题学了sam= = 题意先有一个串,n个子串,两个人轮流每次在子串上加字符,要求加完后还是原串的子串,最后不能加的就是输者,求赢的人 解法:sam之后在构造的状态图上跑s ...
- nyoj137 取石子(三) 楼教主男人八题之一
思路:一堆时,N态.两堆时,当两堆数量相同,P态,不同为N态.三堆时,先手可以变成两堆一样的,必胜N态. 此时可以总结规律:堆数为偶数可能且石子数都是两两相同的,为P态.分析四堆时,当四堆中两两数量一 ...
- POJ 1737 Connected Graph 题解(未完成)
Connected Graph Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3156 Accepted: 1533 D ...
随机推荐
- 迁移 SQL Server 数据库到 Azure SQL 实战
最近有个维护的项目需要把 SQL Server 2012 的数据库迁移到 Azure SQL 上去,迁移过程可谓一波三折,故在此分享这次迁移中碰到的点点滴滴,希望对朋友们有所帮助. 文章来源:葡萄城产 ...
- Web javascript 中常用API合集
来源于:https://www.kancloud.cn/dennis/tgjavascript/241852 一.节点 1.1 节点属性 Node.nodeName //返回节点名称,只读 Node. ...
- Android之什么是Activity和常用的ADB命令以及Android项目结构的认识
总结一下之前学习Android的一些内容 一: Android常用的ADB命令(adb android调试桥) 1.adb devices 查看模拟器设备并重新连接. 2.adb ki ...
- 【转】微软教学:三种方法屏蔽Win7/Win8.1升级Win10推送
原文地址:http://www.ithome.com/html/win10/199961.htm 微软在2015年6月就开启了Win10升级推送工作,主要是靠<获取Windows10>工具 ...
- [转]ExtJS学习笔记(二):handler与listener的区别
原文地址:http://blog.csdn.net/smilingleo/article/details/3733177 ExtJS里handler和listener都是用来对用户的某些输入进行处理的 ...
- Android动态加载框架汇总
几种动态加载的比较 1.Tinker 用途:热修复 GitHub地址:https://github.com/Tencent/tinker/ 使用:http://www.jianshu.com/p/f6 ...
- 启动Maven项目启动报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
tomcat在发布项目的时候没有同时发布maven依赖所添加的jar包,你需要设置一下eclipse:项目 -> 属性 -> Deployment Assembly -> Add - ...
- console的花式用法
1.百度的招聘启示 如图: 下面是输出代码: if(window.console){ var cons = console; if(cons){ cons.log("%c\n ", ...
- C#操作图片帮助类
using System; using System.Collections; using System.IO; using System.Drawing; using System.Drawing. ...
- Python json.dumps 特殊数据类型的自定义序列化操作
场景描述: Python标准库中的json模块,集成了将数据序列化处理的功能:在使用json.dumps()方法序列化数据时候,如果目标数据中存在datetime数据类型,执行操作时, 会抛出异常:T ...