D - Series-Parallel Networks(串并联网络,递推关系,白皮书)

本文探讨了UVA 10253题目的解决方案,涉及串并联网络的计数问题。通过将网络视为树结构,转换为寻找特定条件的树的数目,即每棵树至少有两个子节点,每层节点数递增或递减。文章介绍了两种算法,第一种通过递归枚举整数划分,第二种利用组合数学避免重复计算,强调第二种算法虽然简洁但较难理解。
摘要由CSDN通过智能技术生成

D - Series-Parallel Networks

UVA - 10253

题意就不描述了

输入格式:

​ 输入包含多组式布局,每组数据仅包含一个整数,即边数n(1<=n<=30)。输入结束标志为n=0。

输出格式:

​ 对于每组数据,输出一行,即包含m条边的串并联网络的数目。

这是白皮书上117页的内容,其中给出了两个算法,第一个算法理解但是有点难实现,第二个算法是真心不懂(但是第二个算法代码确实很简单dp吧)

第一个算法:

​ 把串并联网络看作一个树,因为每个串联网络一个分成多个并联网络或者单边 串联,并联网络可以分成

多个串联网络或者单边 并联。可以想想成一棵树的形式,假设刚开始有一个根是一个串连网络(并联网络),下一层全是并联网络(串联网络),就这样交替出现,当然每一棵树的最少得有两个儿子,如果这个棵数是个单边,那么他就是个叶子节点,没有儿子,这样问题就转化为了“共n个叶子,且每个非叶子节点至少有两个子节点”的树的数目f(n),再乘以2就是本题的答案。

即找出n个叶子的树有多少种。

因为题目中说串联在一起(并联在一起)的各个部分可以相互调换顺序,相当于每一层的树交换顺序后 属于同一种,所以我们只要保证从左到右节点数递增或者递减的就可以了

假设对于5个叶子的节点,子树可以分为

1 1 1 1 1

1 1 1 2

1 1 3

1 4

1 2 2

2 3

把每种的情况全加起来即可

对于24个叶子的树:

2 10 12 的情况共有 f ( 2 ) ∗ f ( 10 ) ∗ f ( 12 ) f(2)*f(10)*f(12) f(2)f(10)f(12)种方法

对于 6 6 6有多少种方法吗?难道是 f ( 6 ) ∗ f ( 6 ) ∗ f ( 6 ) f(6)*f(6)*f(6) f(6)f(6)f

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值