加分二叉树

来源:互联网 发布:淘宝电话号码采集 编辑:程序博客网 时间:2024/05/30 23:31

加分二叉树


Description

设一个 n 个节点的二叉树tree的中序遍历为(1,2,3,,n),其中数字 1,2,3,,n 为节点编号。
每个节点都有一个分数(均为正整数),记第 j 个节点的分数为 dj,tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下:
subtree的左子树的加分× subtree的右子树的加分+subtree的根的分数
若某个子树的儿子只有一个,规定另一个儿子的加分为1,叶子的加分就是叶节点本身的分数,不考虑它的空子树。
试求一棵符合中序遍历为(1,2,3,,n)且加分最高的二叉树tree。要求输出;
(1)tree的最高加分
(2)tree的前序遍历


Input

1 行:一个整数 nn30),为节点个数。
2 行:n 个用空格隔开的整数,为每个节点的分数(分数<100)。


Output

1 行:一个整数,为最高加分(结果不会超过4,000,000,000)。
2 行:n 个用空格隔开的整数,为该树的前序遍历


Sample Input

5
5 7 1 2 10


Sample Output

145
3 1 2 4 5


Solution

易知中序遍历的特点是“根左右”。
所以在 1,2,3,,n 中,若 k 为根,则 1~k1 为左子树,k+1~n 为右子树。
枚举根 k,设 fi,j 表示 ij 这一段中最高加分,则

fi,j=MAX{fi,k1fk+1,j+dk}


Code

#include <iostream>#include <cstdio>#define Max(x,y) ((x)>(y)?(x):(y))using namespace std;unsigned f[50][50];int g[50][50];int n;int c[50];void work(int l,int r){    if(l>r)return;    printf(" %d ",g[l][r]);    work(l,g[l][r]-1);    work(g[l][r]+1,r);}int main(){    freopen("tree.in","r",stdin);    freopen("tree.out","w",stdout);    scanf("%d",&n);    for(int i=1;i<=n;i++){        scanf("%d",&c[i]);        f[i][i]=c[i];        g[i][i]=i;    }    for(int i=n;i>=1;i--)        for(int j=i+1;j<=n;j++)            for(int k=i;k<=j;k++){                unsigned tmp=f[i][k-1],ttt=f[k+1][j];                if(k-1<i)tmp=1;                if(k+1>j)ttt=1;                if(tmp*ttt+c[k]>f[i][j]){                    f[i][j]=tmp*ttt+c[k];                    g[i][j]=k;                }            }    printf("%d\n",f[1][n]);    work(1,n);    return 0;}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 朋友妻子来我家洗澡你家茜 老师 主动脱下内内 浪妇杨雪小说全集 同学的妻子在线播放 韩国朋友妻子在线播放 朋友坐牢替他照顾妻子在线播放 比我老婆还要正在线播放 朋友的妻子20在线播放 寂寞的妻子手机在线 朋友出差替他照顾妻子在线播放 偷朋友妻子在线播放 搞兄弟母亲中文字在线播放 隔壁的日本妻子1中文字 年轻的母亲5d整部中文字 老师强入我体内 嫂嫂 的房门没关紧 共享妻子第3季 小石玩妻子第三部 朋友母亲的味道中文版 互换朋友妻子3换 母亲的朋友2集中文免费观看 领导出差他老婆留我过夜 厨房偷上朋友妻全文阅读答案 被老公朋友强入bd 和领导回家睡了他老婆 老公在偷吃别人我在家吃他老爹 送领导回家强睡他老婆 我在老公的眼皮底下偷吃 快递员在我家要了我 30岁军嫂身体好软 当着女朋友的面睡他朋友视频 偷朋友的妻子电影中国字 老公朋友下厨房要了我 朋友打麻将我在楼上 下厨房里边做菜边啪 相隔不到5公尺偷捅妻子朋友 相隔不到5公尺偷吊妻子朋友 好朋友的妻子 偷朋友的妻子中手机观看 浮荡的妻子韩国漫画电影 住在朋友家里偷他妻子故事