UVA10253 Series-Parallel Networks

Series-Parallel Networks

https://vjudge.net/problem/UVA-10253

如果用一个节点表示串联/并联操作,用一棵树表示每一个串并联网络,要求一个节点代表的串并联网络全部按照这个节点表示的方式(串联/并联)拆开成为他的子节点

不难发现除了叶子节点为单边串并联网络外,第一层若为串,第二层就是并,第三层是串....

或者第一层为并,第二层为串,第三层为并.......

其实就是给你n个叶子节点,问你能组成多少颗叶节点数>=2的树

dp[i][j]表示叶节点数最大为i,有j个叶节点的方案数

考虑i个叶节点的节点有p个

dp[i][j] = sum{dp[i - 1][j - p * i] * C(f[i] + p - 1, p)}

蓝书上的边界很难以理解。。我是这样做得边界

dp[1][i] = 1,因为每个节点最多有1个叶子,由于每个节点至少有两个儿子,因此相当于除根节点外每个节点最多有0个叶子,方案就是根节点连所有叶子
dp[i][0] = 1,i >= 1,因为如果有状态转移到这里的时候,意味着叶节点全部在叶节点最大的子树中,情况可行,*1即可

dp[i][1] = 1,i >= 1,显然

被奇怪的边界设定卡的要死

感觉我这样的边界设定比书上好理解多吧。。。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cstdlib>
 5 #include <algorithm>
 6 #include <queue>
 7 #include <vector>
 8 #include <cmath>
 9 #define min(a, b) ((a) < (b) ? (a) : (b))
10 #define max(a, b) ((a) > (b) ? (a) : (b))
11 #define abs(a) ((a) < 0 ? (-1 * (a)) : (a))
12 inline void swap(long long &a, long long &b)
13 {
14     long long tmp = a;a = b;b = tmp;
15 }
16 inline void read(long long &x)
17 {
18     x = 0;char ch = getchar(), c = ch;
19     while(ch < ‘0‘ || ch > ‘9‘) c = ch, ch = getchar();
20     while(ch <= ‘9‘ && ch >= ‘0‘) x = x * 10 + ch - ‘0‘, ch = getchar();
21     if(c == ‘-‘) x = -x;
22 }
23
24 const long long INF = 0x3f3f3f3f;
25 const long long MAXN = 30;
26
27 long long f[MAXN + 50], dp[MAXN + 50][MAXN + 50], n;
28
29 long long tma,tn,tm;
30
31 double ma;
32
33 long long C(long long n, long long m)
34 {
35     long long ans = 1;
36     for(register long long i = n;i >= n - m + 1;-- i) ans *= i;
37     for(register long long i = 2;i <= m;++ i) ans /= i;
38     return ans;
39 }
40
41 int main()
42 {
43     for(register long long i = 1;i <= MAXN;++ i) dp[i][0] = 1;
44     for(register long long i = 1;i <= MAXN;++ i) dp[i][1] = 1;
45     f[1] = 1;
46     for(register int i = 0;i <= MAXN;++ i) dp[1][i] = 1;
47     for(register long long i = 2;i < MAXN;++ i)
48     {
49         f[i] = dp[i - 1][i];
50         for(register long long j = 2;j <= MAXN;++ j)
51             for(register long long p = 0;j >= p * i;++ p)
52                 dp[i][j] += C(f[i] + p - 1, p) * dp[i - 1][j - p * i];
53     }
54     f[MAXN] = dp[MAXN - 1][MAXN];
55     while(scanf("%lld", &n) != EOF && n)
56     {
57         printf("%lld\n", n == 1 ? 1 : 2 * f[n]);
58     }
59     return 0;
60 } 

UVA10253

原文地址:https://www.cnblogs.com/huibixiaoxing/p/8315365.html

时间: 2024-10-31 09:24:39

UVA10253 Series-Parallel Networks的相关文章

UVa10253

10253 Series-Parallel NetworksIn this problem you are expected to count two-terminal series-parallel networks. These are electricnetworks considered topologically or geometrically, that is, without the electrical properties of theelements connected.

series和 paralle

series 串行执行任务 特性:等待慢的一起输出 const { series } = require('gulp'); function javascript(cb) { // body omitted cb(); } function css(cb) { // body omitted cb(); } exports.build = series(javascript, css); paralle 并行执行任务 const { parallel } = require('gulp'); f

Enhancing network controls in mandatory access control computing environments

A?Mandatory?Access?Control?(MAC) aware firewall includes an extended rule set for MAC attributes, such as a security label or path. Application labels may be used to identify processes and perform firewall rule-checking. The firewall rule set may inc

JavaScript学习--Item27 异步编程异常解决方案

1.JavaScript异步编程的两个核心难点 异步I/O.事件驱动使得单线程的JavaScript得以在不阻塞UI的情况下执行网络.文件访问功能,且使之在后端实现了较高的性能.然而异步风格也引来了一些麻烦,其中比较核心的问题是: 1.函数嵌套过深 JavaScript的异步调用基于回调函数,当多个异步事务多级依赖时,回调函数会形成多级的嵌套,代码变成 金字塔型结构.这不仅使得代码变难看难懂,更使得调试.重构的过程充满风险. 2.异常处理 回调嵌套不仅仅是使代码变得杂乱,也使得错误处理更复杂.这

《Nodejs开发加密货币》之十一:一张图熟练使用Async组件解决回调大坑

关于 <Nodejs开发加密货币>,是一个加密货币产品的详细开发文档,涉及到使用Nodejs开发产品的方方面面,从前端到后台.从服务器到客户端.从PC到移动.加密解密等各个环节.代码完全开源.文章免费分享. 相关资源见 http://ebookchain.org 前言 前面说过,在Nodejs的世界里"事事皆回调",学习使用Nodejs,最不可能回避的就是"回调"(用"调回"更直观些).无法回避,自然要积极面对,因此开源社区出现了很多

async异步流程控制神器

async https://www.npmjs.com/package/async Async is a utility module which provides straight-forward, powerful functions for working with asynchronous JavaScript. Although originally designed for use with Node.js and installable via npm install async,

跟着文档学习gulp1.2创建任务(task)

导出任务 任务(task)可以分为公开(public)或私有(private)类型 公开任务从gulpfile中被导出(export),可以通过gulp命令直接调用 私有任务被设计为在内部使用,通常作为series()或parallel()组合的组成部分(私有类型不能直接被用户调用) 例子1: const { series,parallel } = require('gulp'); function clean(cb) { // body omitted cb(); } function bui

P4: Programming Protocol-Independent Packet Processors

Name of article:Programming Protocol-Independent Packet Processors Origin of the article:Bosshart P , Daly D , Izzard M , et al. Programming Protocol-Independent Packet Processors[J]. Acm Sigcomm Computer Communication Review, 2013, 44(3):87-95. ABST

控制异步回调利器 - async 串行series,并行parallel,智能控制auto简介

async 作为大名鼎鼎的异步控制流程包,在npmjs.org 排名稳居前五,目前已经逐渐形成node.js下控制异步流程的一个规范.async成为异步编码流程控制的老大哥绝非偶然,它不仅使用方便,文档完善,把你杂乱无章的代码结构化,生辰嵌套的回掉清晰化. async 提供的api包括三个部分: (1)流程控制 常见的几种流程控制. (2)集合处理 异步操作处理集合中的数据. (3)工具类 . github 开源地址: https://github.com/caolan/async 安装方法: