![]() 成都石室中学、福建长乐一中信奥教练联合呈现。题库教师群:515658966,仅供教师加入 |
初赛题库:提高组 普及组 拥有自我:一本通自由题库 更多拥有:扩展题库 编程启蒙 |
你现在还未登录哦! 用户登录 找回密码 注册新用户 |
---|
首页 | 排名 | 提交记录 | 题目列表 | 测试比赛 | 教师频道 | 正版书籍 | 关于 |
---|
1580:加分二叉树时间限制: 1000 ms 内存限制: 524288 KB 提交数:1184 通过数: 934 【题目描述】原题来自:NOIP 2003 设一个 n 个节点的二叉树 tree 的中序遍历为 (1,2,3,⋯,n),其中数字 1,2,3,⋯,n 为节点编号。每个节点都有一个分数(均为正整数),记第 i 个节点的分数为 di ,tree 及它的每个子树都有一个加分,任一棵子树 subtree(也包含 tree 本身)的加分计算方法如下: 记 subtree 的左子树加分为 l,右子树加分为 r,subtree 的根的分数为 a,则 subtree 的加分为: l×r+a 若某个子树为空,规定其加分为 1,叶子的加分就是叶节点本身的分数。不考虑它的空子树。 试求一棵符合中序遍历为 (1,2,3,⋯,n) 且加分最高的二叉树 tree。 要求输出: 1、tree 的最高加分; 2、tree 的前序遍历。 【输入】第一行一个整数 n 表示节点个数; 第二行 n 个空格隔开的整数,表示各节点的分数。 【输出】第一行一个整数,为最高加分 b; 第二行 n 个用空格隔开的整数,为该树的前序遍历。 【输入样例】5 5 7 1 2 10 【输出样例】145 3 1 2 4 5 【提示】数据范围与提示: 对于 100% 的数据,n<30,b<100,结果不超过 4×109 。 |
本题库与《信息学奥赛一本通(C++版)》(南京大学出版社)配套。 本网站属公益、非盈利性质,不涉及与书相关的商业活动,仅适当接受少量赞助以支持网站的运行维护。 蜀ICP备2024068936号-2 联系我们: 248801752@qq.com 23967609@qq.com | 网站使用规则 网站用户协议 |