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,显然

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

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

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <vector>
#include <cmath>
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b))
#define abs(a) ((a) < 0 ? (-1 * (a)) : (a))
inline void swap(long long &a, long long &b)
{
long long tmp = a;a = b;b = tmp;
}
inline void read(long long &x)
{
x = ;char ch = getchar(), c = ch;
while(ch < '' || ch > '') c = ch, ch = getchar();
while(ch <= '' && ch >= '') x = x * + ch - '', ch = getchar();
if(c == '-') x = -x;
} const long long INF = 0x3f3f3f3f;
const long long MAXN = ; long long f[MAXN + ], dp[MAXN + ][MAXN + ], n; long long tma,tn,tm; double ma; long long C(long long n, long long m)
{
long long ans = ;
for(register long long i = n;i >= n - m + ;-- i) ans *= i;
for(register long long i = ;i <= m;++ i) ans /= i;
return ans;
} int main()
{
for(register long long i = ;i <= MAXN;++ i) dp[i][] = ;
for(register long long i = ;i <= MAXN;++ i) dp[i][] = ;
f[] = ;
for(register int i = ;i <= MAXN;++ i) dp[][i] = ;
for(register long long i = ;i < MAXN;++ i)
{
f[i] = dp[i - ][i];
for(register long long j = ;j <= MAXN;++ j)
for(register long long p = ;j >= p * i;++ p)
dp[i][j] += C(f[i] + p - , p) * dp[i - ][j - p * i];
}
f[MAXN] = dp[MAXN - ][MAXN];
while(scanf("%lld", &n) != EOF && n)
{
printf("%lld\n", n == ? : * f[n]);
}
return ;
}

UVA10253

UVA10253 Series-Parallel Networks的更多相关文章

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

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

  2. Nodejs中Async模块的流程控制方法

    首先,使用Asycn模块需要安装,它不是node自带的.其次,该模块有大约20多个流程控制方法,我们在这里仅分析常用的series, parallel, waterfall, auto这四种,并且尽量 ...

  3. 避免Node.js中回调地狱

    为了解决这个阻塞问题,JavaScript严重依赖于回调,这是在长时间运行的进程(IO,定时器等)完成后运行的函数,因此允许代码执行经过长时间运行的任务. downloadFile('example. ...

  4. 你不知道的JavaScript--Item27 异步编程异常解决方案

    1.JavaScript异步编程的两个核心难点 异步I/O.事件驱动使得单线程的JavaScript得以在不阻塞UI的情况下执行网络.文件访问功能,且使之在后端实现了较高的性能.然而异步风格也引来了一 ...

  5. gulp4.0 前端构建脚手架

    最近看了下gulp4.0的升级,感觉和3.0相比变化还是比较大的,很多3.0的写法和插件会出现一些莫名其妙的变化,详细的变化就先不说了,这里我直接把我配置好的代码拿过来吧,方便各位可以更好的学习和使用 ...

  6. Enhancing network controls in mandatory access control computing environments

    A Mandatory Access Control (MAC) aware firewall includes an extended rule set for MAC attributes, su ...

  7. gulp源码分析

    一.整体结构分析 整体结构 通过在nodejs环境对源码的打印,我们最终得到的gulp实例行如下图.那么我们gulp实例上的属性和方法是如何生成的呢? Gulp { domain: null, _ev ...

  8. Feature Fusion for Online Mutual Knowledge Distillation (CVPR 2019)

    一.解决问题 如何将特征融合与知识蒸馏结合起来,提高模型性能 二.创新点 支持多子网络分支的在线互学习 子网络可以是相同结构也可以是不同结构 应用特征拼接.depthwise+pointwise,将特 ...

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

    导出任务 任务(task)可以分为公开(public)或私有(private)类型 公开任务从gulpfile中被导出(export),可以通过gulp命令直接调用 私有任务被设计为在内部使用,通常作 ...

  10. async异步流程控制神器

    async https://www.npmjs.com/package/async Async is a utility module which provides straight-forward, ...

随机推荐

  1. 关于spring java.lang.IllegalArgumentException: Name for argument type [java.lang.String] 的错误

    况描述: web工程在windows环境eclipse下编译部署没有问题,系统升级时需要运维从Git取相应的源码并编译部署到线上机器,部署启动正常没有错误,当访问业务的action时报错,如下. 错误 ...

  2. Luogu P2717 寒假作业(平衡树)

    P2717 寒假作业 题意 题目背景 \(zzs\)和\(zzy\)正在被寒假作业折磨,然而他们有答案可以抄啊. 题目描述 他们共有\(n\)项寒假作业.\(zzy\)给每项寒假作业都定义了一个疲劳值 ...

  3. Luogu P2458 [SDOI2006]保安站岗(树形dp)

    P2458 [SDOI2006]保安站岗 题意 题目描述 五一来临,某地下超市为了便于疏通和指挥密集的人员和车辆,以免造成超市内的混乱和拥挤,准备临时从外单位调用部分保安来维持交通秩序. 已知整个地下 ...

  4. 安装Ubuntu16.04卡在logo界面

    问题背景 笔者在使用U盘UEFI模式安装Ubuntu16.04时,遇到一个问题,即在BIOS里的boot设置U盘为第一启动项之后,启动,并没有顺利进入系统,而是卡在了logo界面.(PS:其实我等了它 ...

  5. Python(四)基础篇之「文件对象&错误处理」

    [笔记]Python(四)基础篇之「文件对象&错误处理」 2016-12-08 ZOE    编程之魅  Python Notes: ★ 如果你是第一次阅读,推荐先浏览:[重要公告]文章更新. ...

  6. Java序列化接口的作用总结1

    一个对象有对应的一些属性,把这个对象保存在硬盘上的过程叫做”持久化”. 把堆内存中的对象的生命周期延长,存入硬盘,做持久化操作.当下次再需要这个对象的时候,我们不用new了,直接从硬盘中读取就可以了. ...

  7. apache netbeans不再集成tomcat

    老版本 8.2之前的,集成tomcat,安装使用比较简单https://netbeans.org/features/index.html 新版本的阿帕奇netbeans,则不集成tomcat,使用时, ...

  8. 用python打造简单的cms识别

    代码 #!/usr/bin/env python3 # coding:utf-8 #lanxing #判断代码,判断是否安装requests库 try: import requests except: ...

  9. 用Axure RP7创建响应式原型教程

    自从几年前响应式技术开始应用时,创建响应式原型就成为了很多人苦恼的事情.响应式设计用一种非常优雅的方式处理为多种设备类型使用HTML和CSS编码的应用,但是提供给UX专业人士的原型工具却没有具备同样品 ...

  10. 微信小程序 拼团商品倒计时(拼团列表、拼团商品详情)

    直接上图: 拼团列表.拼团详情-倒计时                                    //单个倒计时,适用用于单个商品的倒计时 js文件: //倒计时 function cou ...