1087 加分二叉树 | OJ题库 | CODE STUDY
CODE STUDY
Programming Practice Platform

欢迎回来

1087

加分二叉树

Easy 时间限制 1000 ms 内存限制 262144 KB
树形DP

题目详情

返回题库

题目描述

设一个 n  个节点的二叉树 tree  的中序遍历为 (1,2,3,⋯,n) ,其中数字 1,2,3,⋯,n  为节点编号。每个节点都有一个分数(均为正整数),记第 i  个节点的分数为 $d_i$  ,tree  及它的每个子树都有一个加分,任一棵子树 subtree (也包含 tree  本身)的加分计算方法如下:

记 subtree  的左子树加分为 l ,右子树加分为 r ,subtree  的根的分数为 a ,则 subtree  的加分为:

l×r+a

若某个子树为空,规定其加分为 1 ,叶子的加分就是叶节点本身的分数。不考虑它的空子树。

试求一棵符合中序遍历为 (1,2,3,⋯,n)  且加分最高的二叉树 tree 。

要求输出:

1、tree  的最高加分;

2、tree  的前序遍历。

输入描述

第一行一个整数n表示节点个数;

第二行n个空格隔开的整数,表示各节点的分数。

数据范围与提示:

对于 100% 的数据,n<30,b<100,结果不超过4×$10^9$。

输出描述

第一行一个整数,为最高加分b;

第二行n个用空格隔开的整数,为该树的前序遍历。

测试样例

样例支持多行内容展示
样例1
输入
5
5 7 1 2 10
输出
145
3 1 2 4 5
editor.py

提交前会先自动运行样例。只有样例全部通过,才会进入后端正式判题。