最小代价子母树

 

设有一排数,共n个,例如:22,14,7,13,26,15,11。任意两个相邻的数可以进行归并,归并的代价为

 

该两个数的和,经过不断的归并,最后归为一个堆,而全部归并代价的和称为总代价,给出一种归并算法,

 

使代价为最小。例如有3个数,12 7 8。

12 7 8    12  7 8

|   / /        /   /  |

19 /           /  15

 / /               / /

 27              27

 

如上,归并的过程有2种:19+27=46 和 15+27=42。由此可见第二种归并方法总代价为最小。

 

题目来自“全国少年信息学(计算机)竞赛例题解析”

 

有两个强调的地方:

1.数的归并是有顺序的,只有相邻的数才能归并。

2.只能两两归并(可能是废话)

最初打算采用递归的方式发现不可行。

一下代码:

MinCostTree.h

 

MinCostTree.cpp

 

int input[]={3,18,7,14,10,12,23,41,16,24}的结果:

 

000 000 000 000 000 000 000 000 000 000 

021 025 021 024 022 035 064 057 040 

049 060 052 058 067 111 137 121 

084 098 086 117 153 184 208 

125 143 152 217 226 267 

170 211 257 290 314 

238 332 332 378 

362 409 420 

439 497 

527 

min value=527

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要创建一个母公司树,可以使用Java中的树数据结构。可以使用节点类来表示每个公司,该节点类包含公司名称、公司、母公司等属性。然后,可以使用Java中的树类来组织这些节点,以形成母公司树。 下面是一个简单的Java代码示例,用于创建一个母公司树: ```java class CompanyNode { String name; List<CompanyNode> children; CompanyNode parent; public CompanyNode(String name) { this.name = name; children = new ArrayList<>(); } public void addChild(CompanyNode child) { children.add(child); child.parent = this; } } public class CompanyTree { CompanyNode root; public CompanyTree(CompanyNode root) { this.root = root; } public void print() { print(root, 0); } private void print(CompanyNode node, int depth) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < depth; i++) { sb.append(" "); } sb.append(node.name); System.out.println(sb.toString()); for (CompanyNode child : node.children) { print(child, depth + 1); } } } // Usage: CompanyNode root = new CompanyNode("Parent Company"); CompanyNode child1 = new CompanyNode("Child Company 1"); CompanyNode child2 = new CompanyNode("Child Company 2"); CompanyNode grandchild1 = new CompanyNode("Grandchild Company 1"); CompanyNode grandchild2 = new CompanyNode("Grandchild Company 2"); root.addChild(child1); root.addChild(child2); child1.addChild(grandchild1); child2.addChild(grandchild2); CompanyTree tree = new CompanyTree(root); tree.print(); ``` 上述代码将创建一个母公司树,其中Parent Company是根节点,Child Company 1和Child Company 2是其节点,Grandchild Company 1和Grandchild Company 2是其节点的节点。输出结果将打印整个树的结构。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值