UVa Online Judge

  题意是计算给定数量的边通过串联并联两种方式,能组成多少种不同的网络。将它转化为一个树形结构,也就是求有多少不同构的树。

代码如下:

 #include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring> using namespace std; typedef long long LL;
const int N = ;
LL ans[N];
int s[N], top; LL com(LL n, LL m) {
LL ret = ;
for (int i = ; i < m; i++) ret *= n - i, ret /= i + ;
return ret;
} void dfs(int r, int x) {
if (r <= ) {
if (top <= ) return ;
int cnt = ;
LL tmp = ;
for (int i = ; i <= top; i++) {
if (s[i] == s[i + ]) cnt++;
else {
tmp *= com(ans[s[i]] + cnt - , cnt);
cnt = ;
}
}
ans[x] += tmp;
return ;
}
for (int i = s[top]; i <= r; i++) {
s[++top] = i, s[top + ] = -;
dfs(r - i, x);
top--;
}
} void PRE() {
ans[] = ;
for (int i = ; i < N; i++) {
s[top = ] = ;
ans[i] = ;
dfs(i, i);
//cout << i << ' ' << ans[i] << endl;
}
for (int i = ; i < N; i++) ans[i] <<= ;
} int main() {
PRE();
int n;
while (cin >> n && n) cout << ans[n] << endl;
return ;
}

UPD:

 #include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring> using namespace std; typedef long long LL;
const int N = ;
LL dp[N][N], ans[N]; LL com(LL n, LL m) {
LL ret = ;
for (int i = ; i < m; i++) {
ret *= n - i;
ret /= i + ;
}
return ret;
} void PRE() {
ans[] = ;
dp[][] = ;
for (int i = ; i < N; i++) {
dp[i][] = dp[i][] = ;
for (int j = ; j < N; j++) {
dp[i][j] = ;
for (int k = ; k * i <= j; k++) {
dp[i][j] += com(ans[i] + k - , k) * dp[i - ][j - k * i];
}
}
ans[i + ] = dp[i][i + ];
//cout << ans[i + 1] << endl;
}
} int main() {
PRE();
int n;
while (cin >> n && n) cout << (n > ? ans[n] << : ) << endl;
return ;
}

——written by Lyon

uva 10253 Series-Parallel Networks (整数划分+多重集)的更多相关文章

  1. UVA 10253 Series-Parallel Networks (树形dp)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Series-Parallel Networks Input: standard ...

  2. 蓝书例题之UVa 10253 Series-Parallel Networks

    挺有趣的一道题 首先转化模型,思路参考蓝书,可得出等同于求共n个叶子,且每个非叶结点至少有两个子结点的无标号树的个数的二倍,设个数为\(f[n]\) 考虑怎么求\(f[n]\),假设有一个\(n\)的 ...

  3. 51nod p1201 整数划分

    1201 整数划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} {1,5} {2, ...

  4. 2014北大研究生推免机试(校内)-复杂的整数划分(DP进阶)

    这是一道典型的整数划分题目,适合正在研究动态规划的同学练练手,但是和上一个随笔一样,我是在Coursera中评测通过的,没有找到适合的OJ有这一道题(找到的ACMer拜托告诉一声~),这道题考察得较全 ...

  5. 整数划分 (区间DP)

    整数划分(四) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近 ...

  6. nyoj 90 整数划分

    点击打开链接 整数划分 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 将正整数n表示成一系列正整数之和:n=n1+n2+-+nk,  其中n1≥n2≥-≥nk≥1,k≥ ...

  7. 整数划分 Integer Partition(二)

    本文是整数划分的第二节,主要介绍整数划分的一些性质. 一 先来弥补一下上一篇文章的遗留问题:要求我们所取的 (n=m1+m2+...+mi )中  m1 m2 ... mi连续,比如5=1+4就不符合 ...

  8. 整数划分 Integer Partition(一)

    话说今天百度面试,可能是由于我表现的不太好,面试官显得有点不耐烦,说话的语气也很具有嘲讽的意思,搞得我有点不爽.Whatever,面试中有问到整数划分问题,回答这个问题过程中被面试官搞的不胜其烦,最后 ...

  9. 51nod1201 整数划分

    01背包显然超时.然后就是一道神dp了.dp[i][j]表示j个数组成i的方案数.O(nsqrt(n)) #include<cstdio> #include<cstring> ...

随机推荐

  1. springMVC原理解析

    1:SpringMVC运行原理 2:工作流程 (1)客户端(浏览器)发送请求,直接请求到DispatcherServlet. (2)DispatcherServlet根据请求信息调用HandlerMa ...

  2. SQLite in Python: 如何在Python中使用SQLite数据库

    SQLite3 可使用 sqlite3 模块与 Python 进行集成.sqlite3 模块是由 Gerhard Haring 编写的.它提供了一个与 PEP 249 描述的 DB-API 2.0 规 ...

  3. JavaScript-JQ实现自定义滚动条插件1.0

    此滚动条仅支持竖向(Y轴) 一.Css /*这里是让用户鼠标在里面不能选中文字,避免拖动的时候出错*/ body { -moz-user-select: none; /*火狐*/ -webkit-us ...

  4. FileIntputStream / FileOutputStream 类

    FileInputStream类(重点)     (1)基本概念 java.io.FileInputStream类用于读取诸如图像之类的原始字节流.   (2)常用的方法 FileInputStrea ...

  5. GitHub上的SliddingMenu滑动过程中卡顿问题的解决的方法

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wenyiqingnianiii/article/details/25123995 找了非常久,仅仅需 ...

  6. DirectX11笔记(六)--Direct3D渲染2--VERTEX BUFFER

    原文:DirectX11笔记(六)--Direct3D渲染2--VERTEX BUFFER 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u0103 ...

  7. 覆盖equals时请遵守通用约定

    Object类中非final修饰的方法有equals().hashCode().toString().finalize().clone()1.equals()方法不需要被覆盖的情况:1)实例化的对象只 ...

  8. linux系统命令配置文件

    系统命令要独占地控制系统,并让一切正常工作.所有如 login(完成控制台用户身份验证阶段)或 bash(提供用户和计算机之间交互)之类的程序都是系统命令.因此,和它们有关的文件也特别重要.这一类别中 ...

  9. BZOJ 1925地精部落题解

    题目链接 一道神仙题,有很多思考的方式,这里选择最好理解的一种来讲 我们将序列分为两种,一种开头递增,一种开头递减,显然这两种序列的数目是一样的 现在我们只用考虑开头递增的情况 f[i][j]表示前i ...

  10. Java ANSI转码UTF-8

    public static void change(String filepath) throws UnsupportedEncodingException, IOException{ Buffere ...