比赛题目:到别的版问过,不过没人回复 :(只好到这里请教各位高手了

zhushizu 2003-11-30 10:34:34
设一个N个节点的2叉树中续遍历为(1,2,3,。。。n)其中数字1,2,3...为节点编号。每个节点有一个加分,任意一棵子树subtree的加分计算方法如下:


subtree的左子树加分*subtree右子树加分+subtree根的分数 若某个子树为空则加分为1,叶子的加分就是叶子节点本身的分数,不考虑他的空子树。

试求一棵符合中续遍历为(1,2,3,...n)且加分最高的2叉数tree。要求输出: 1.tree的最高加分  
2.tree的前序遍历
输入格式:
第一行:一个整数n(n<30),为接点个数。
第二行:n个用空格隔开的数,为每个接点的分数





为了节约分数,最后在特别联系给分,多少都行,如果现在就把分加上可能会浪费,特此声明^-^
...全文
58 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
LeeMaRS 2003-12-01
  • 打赏
  • 举报
回复
NOIP提高组第三题, 经典的动态规划. 应该联想到NOI以前的那个石子合并, 就很明白了.

用搜索+记忆化->自顶向下DP的思路思考最明白,又好写.
LeeMaRS 2003-12-01
  • 打赏
  • 举报
回复
NOIP提高组第三题, 经典的动态规划. 应该联想到NOI以前的那个石子合并, 就很明白了.

用搜索+记忆化->自顶向下DP的思路思考最明白,又好写.
LeeMaRS 2003-12-01
  • 打赏
  • 举报
回复
NOIP提高组第三题, 经典的动态规划. 应该联想到NOI以前的那个石子合并, 就很明白了.

用搜索+记忆化->自顶向下DP的思路思考最明白,又好写.
Anders911 2003-12-01
  • 打赏
  • 举报
回复
这个题就是加分二叉树
zhang_jiang 2003-11-30
  • 打赏
  • 举报
回复
因为这棵2叉树按中续是顺序排列的,所以设根为root,他的子树分别为:lstree,rstree。
求最高得分的函数叫:maxvalue(tree * root)
所以maxvalue(root)相当于:maxvalue(root->lstree)*maxvalue(rstree)+root->value,即相当于下面括号的操作:
((1……i-1)i(i+1……n)),问题就变为选择括号的位置,使得整个表达式的值最大,
这个是矩阵连乘的变形,关于矩阵连乘问题,你可以参考王晓东的《计算机算法设计与分析》,而且一般算法书都会提及的,属于动态规划
ZhangYv 2003-11-30
  • 打赏
  • 举报
回复
确实是选择括号的位置,动态规划

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧