加分二叉树解题报告_第1页
加分二叉树解题报告_第2页
加分二叉树解题报告_第3页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2014. & 19加分义树【0IP2003提高组】Description设一个n个节点的二叉树tree的中序遍历为(1, 2, 3,n),其中数字 l,2,3,n为节点编号。每个节点都有一个分数(均为正整数),记第j个节点的分 数为di, tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本 身)的加分计算方法如下:subtree的左子树的加分X subtree的右子树的加分+subtree的根的分数若某个子树为空,规定其加分为1,叶子的加分就是叶节点本身的分数。不考 虑它的空子树。试求一棵符合中序遍历为(1,2, 3,n)且加分最高的二义树tree。要求输

2、出:(1) tree的最高加分(2) tree的前序遍历Input第1行:一个整数n(n <30),为节点个数。第2行:n个用空格隔开的整数,为每个节点的分数(分数100)。Output第1行:一个整数,为最高加分(结果不会超过4, 000, 000, 000) o第2行:n个用空格隔开的整数,为该树的前序遍历。Sample Input5 7 1 2 10Sample Output1453 1 24 5题型:树型动规用递归遍历整棵树。因为给出的是中序遍历,要求求出前序,所以实际上是区间动规。在读入数据时把ansii初始化为i的分数,表示当一棵子树中只有一个节点时的加分。把ansi-l i

3、初始化为i与il分数之和,root ilZ liZ为iT (这点很重要!因为有多解,所以只有这样才能和标准输出一样)。枚举每一个节点k作为根节点,递归查找f(I, k-l)*f(k+l, j)+scorek,保存最大值为 max 和 ko 结束循环时,ansi j=max, rooti j=k;最后递归输出即可。代码:(变量名稍有不同)#include<iostream>using namespace std;long ans4040, root4040, map40 = 0, n;long dfs (long x,long y)long s, sa, sb, anO, w;for

4、(s=x;s<=y;s+)if (x二sT && s+l<=y) if (ans x sT >=0) sa=ans x sT;else sa二dfs (x, sT);if(anss+1y>=0)sb二anss+1y;else sb二dfs (s+1, y);if(sa*sb+maps>an)an=sa*sb+maps;w二 s;ansxy=an;root x y二w;return an;void out(long x,long y)if(rootxy!=0)cout<<rootxy<<J;if (x!=y)out (x, root x y T);out (root x y+l, y);int main()long s;cin>>n; memset(ans, -1, sizeof(ans); for(s=l;s<=n;s+) cin>>maps;ansss=maps;rootss=s;ans sl s =maps +maps

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论