加分二叉树

加分二叉树

题意:

给你一个数的中序表达式,然后一颗子树的分数=左子树的分数*右子树的分数+根的分数
给你所有点的分数,让你构造出分值最大的树,输出前序遍历

题解:

区间dp问题
设dp[i][j]表示中序遍历是w[i~j]的所有二叉树的得分的最大值
树张什么样都可以,而我们只是想要分数最高
所以我们从小的子树开始,先决定区间长度,然后枚举区间的起点,决定区间的终点,我们求出每一小区间的最大分值,求大的区间时就用小的合并上
区间[l,r]的最大分数
k在[l,r]中,为枚举的根
dp[i][j]=max(dp[i][k-1]*dp[k+1][j]+w[k]),保留最大值的同时记录根,方便之后的前序遍历输出

代码:

#include<bits/stdc++.h>
#define debug(a,b) printf("%s = %d\n",a,b);
typedef long long ll;
using namespace std;inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
const int maxn=60;
int w[maxn];
int f[maxn][maxn];
int root[maxn][maxn];
void dfs(int l,int r){if(l>r)return ;int k=root[l][r];printf("%d ",k);dfs(l,k-1);//前 dfs(k+1,r);//后 
}
int main()
{int n;cin>>n;for(int i=1;i<=n;i++)cin>>w[i];for(int len=1;len<=n;len++){for(int i=1;i+len-1<=n;i++){int j=i+len-1;for(int k=i;k<=j;k++){int right,left;if(k==i){left=1;right=f[k+1][j];}else if(k==j){left=f[i][k-1];right=1;}else {left=f[i][k-1];right=f[k+1][j];}int score=left*right+w[k];if(score>f[i][j]){f[i][j]=score;root[i][j]=k;}}}}cout<<f[1][n]<<endl;dfs(1,n);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AtCoder ZONe Energy Programming Contest 题解

文章目录A - UFO InvasionB - Sign of FriendshipC - MAD TEAMD - Message from AliensE - SneakingF - Encounter and FarewellZONe Energy Programming ContestA - UFO Invasion 太简单了。 #include <cstdio> char ch[10] { Z, O, N, e }; char s[20];int main() {…

2.11模拟总结

前言 145&#xff08;175&#xff1f;&#xff09;pts 100450&#xff08;30&#xff1f;&#xff09; rnk11&#xff08;8&#xff1f;&#xff09; 之所以有括号是因为T3莫名其妙的TLE了&#xff1f; 考后我一模一样的码再交一遍30分就到手了… 应该不是我的问题吧&#xff…

[aspnetcore.apidoc]一款很不错的api文档生成工具

简单徐速一下为什么选用了aspnetcore.apidoc 而没有选用swagger最初我们也有在试用swagger&#xff0c;但总是有些感觉&#xff0c;感觉有点不满意&#xff0c;就但从api文档角度来说&#xff0c;从前后端文档沟通角度来讲apidoc的表现形式&#xff0c;要比swagger简单的多&…

【学习笔记】浅谈短小可爱的左偏树(可并堆)

文章目录左偏树左偏树的合并(merge)操作例题罗马游戏[Apio2012]dispatching[JLOI2015]城池攻占[Baltic2004]sequence左偏树 左偏树是一个堆&#xff0c;而且是一个可并堆&#xff0c;所以一定有权值的限制 以小根堆为例&#xff0c;那么必须满足节点权值小于左右儿子权值&…

2.12 模拟

文章目录前言题目解析染色计划&#xff08;color&#xff09;奇度边集&#xff08;edges&#xff09;猜拳游戏&#xff08;guess&#xff09;代码T1T2LCT整体二分总结前言 120pts 期望&#xff1a;4010020160 实际&#xff1a;406020120 rnk 9 我yue了。 怎么又是不可抗力性挂…

Acwing1069. 凸多边形的划分

Acwing1069. 凸多边形的划分 题意&#xff1a; 一个N个顶点的凸多边形&#xff0c;划分成N-2个互不相交的三角形&#xff0c;对于每个三角形&#xff0c;其三个顶点的权值相乘都可得到一个权值乘积&#xff0c;试求所有三角形的顶点权值乘积之和至少为多少。 题解&#xff1…

徐磊(Devops):一名写了十几年代码但还没写够的程序员

徐磊&#xff08;Devops 社区领袖&#xff09;【个人介绍】徐磊&#xff0c;微软MVP&#xff08;微软最有价值专家&#xff0c;大中华区域社区技术总监&#xff0c;Devops 社区领袖&#xff09;&#xff0c;从事过网管、技术支持、网络、软件开发等工作&#xff0c;一名写了十几…

加强版[BZOJ#3483] SGU505 Prefixes and suffixes(询问在线版)

文章目录descriptionsolutioncode#3483. SGU505 Prefixes and suffixes&#xff08;询问在线版&#xff09;description 给定&#x1d45b;个字符串&#xff0c;有&#x1d45a;个询问。 每个询问给出两个字符串&#x1d460;1, &#x1d460;2&#xff0c;问&#x1d45b;个字…

AcWing 320. 能量项链

AcWing 320. 能量项链 题意&#xff1a; 题解&#xff1a; 和环形石头合并基本一样 代码&#xff1a; #include<bits/stdc.h> #define debug(a,b) printf("%s %d\n",a,b); typedef long long ll; using namespace std;inline int read(){int s0,w1;char c…

ERP不规范,同事两行泪

最近的很多次对外交流&#xff0c;都聊到了ERP建设的话题&#xff0c;并且无一例外的不那么让人省心&#xff0c;回想我这么多年走过的ERP坑坑路&#xff0c;在这里也写下经验和总结&#xff0c;希望能给正在或者即将走上ERP建设路的企业一些思考和帮助。导读1、几个瞎眼而普遍…

2.13模拟总结

文章目录前言题目解析最小划分&#xff08;divide&#xff09;进制路径&#xff08;base&#xff09;欧拉欧拉&#xff08;eular&#xff09;代码T1T2T3总结前言 day9 170pts 期望&#xff1a;10010020220 实际&#xff1a;701000170 rnk7 挂的分有点多qwq 分数要是得满就能拿…

Panasonic Programming Contest (AtCoder Beginner Contest 195) 题解

文章目录A - Health M DeathB - Many OrangesC - CommaD - Shipping CenterE - Lucky 7 BattleF - Coprime PresentPanasonic Programming Contest (AtCoder Beginner Contest 195)A - Health M Death 判断倍数。 #include <cstdio> int main() {int M, H;scanf( "…

长沙.NET社区之光

奈何万事开头难迎着改革开放四十年带来的春风&#xff0c;长沙的互联网生态环境以唐胡子俱乐部为首的一众互联网社群将长沙互联网的环境推上了一个新的台阶。年底&#xff0c;我与有幸一起共事的溪源兄&#xff0c;下班后一起闲聊&#xff0c;觉着长沙的.NET的生态环境亟待改善…

P3205 [HNOI2010]合唱队

P3205 [HNOI2010]合唱队 题意&#xff1a; 有n个数&#xff0c;然后插入队伍中&#xff0c;如果队列当前为空&#xff0c;则直接插入&#xff0c;然后每次插入和上一次插入的比较&#xff0c;如果大于&#xff0c;插入当前队列的最右侧&#xff0c;如果小于&#xff0c;插入当…

2.14模拟总结

前言 节日快乐&#xff01; (逃) day10 50pts 期望&#xff1a;10302060 实际&#xff1a;0302050 rnk11 彻彻底底的摆烂局了。 但是rnk竟然没有太掉&#xff0c;所以我应该并不孤独… 和KH并排坐在机房里&#xff0c;各自看着电脑&#xff0c;痴痴想着各自的心事&#xff0c;…

KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200)题解

文章目录A - CenturyB - 200th ABC-200C - Ringos Favorite Numbers 2D - Happy Birthday! 2E - Patisserie ABC 2F - Minflip SummationKYOCERA Programming Contest 2021&#xff08;AtCoder Beginner Contest 200&#xff09; A - Century 简单的除以200200200向上取整 B…

高级进阶:Azure DevOps搞定.NET Core编译版本号自增

点击上方蓝字关注“汪宇杰博客”熟悉.NET Framework的人知道&#xff0c;我们可以通过指定AssemblyVersion为10.0.*来让编译器自增版本号。但是.NET Core和.NET Standard不行。即使有MSBump这样的开源项目&#xff0c;也有一定的缺陷。一般这样的需求会出现在CI/CD服务器上。我…

Little Boxes UVALive - 8209

Little Boxes UVALive - 8209 题意&#xff1a; 给你四个数&#xff0c;输出四个数之和&#xff0c;四个数小于等于262之内 题解&#xff1a; 这。。。这。。水题 unsigned int 0&#xff5e;4294967295 (10位数&#xff0c;4e9) int -2147483648&#xff5e;2147483647 (…

2.15模拟总结

前言 day11 期望&#xff1a;406030130 实际&#xff1a;4003070 rnk16 挂大分了。。 T2树边不加双向&#xff1a;60->0。 这什么伞兵bug啊&#xff01; 整体状态也不太好&#xff0c;T2死磕无果。 T1看出正解结果写不出来拉插&#xff0c;乐。 题目解析 T1 网格序列&am…

Mynavi Programming Contest 2021(AtCoder Beginner Contest 201)题解

文章目录A - Tiny Arithmetic SequenceB - Do you know the second highest mountain?C - Secret NumberD - Game in Momotetsu WorldE - Xor DistancesF - Insertion SortMynavi Programming Contest 2021&#xff08;AtCoder Beginner Contest 201&#xff09;A - Tiny Arit…