[NOIP2003]加分二叉树【动态规划】

【动态规划】[NOIP2003]加分二叉树 题目感觉这个题挺难的啊 毕竟dp很弱 一个比较经典的树形dp 我们用f[i][j]表示区间i~j的最大加分 dp[i][j]表示区间i~j的最大加分时的根节点是什么 所以初始化f[i][i] = a[i] dp[i][i] = i 然后就是循环枚举区间 然后在每个区间中在枚举根节点 如果发现当前区间的左子树的加分×右子树的加分 + 根的分数大于当前的f[i][j]就更新 最后还要输出一个前 阅读详情

【问题描述】

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

subtree的左子树的加分×subtree的右子树的加分+subtree的根的分数

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

子树。

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

(1)tree的最高加分

(2)tree的前序遍历

 

【输入格式】

第1行:一个整数n(n<30),为节点个数。

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

 

【输出格式】

第1行:一个整数,为最高加分(结果不会超过4,000,000,000)。

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

 

解题思路:这题我觉得归为区间DP比较合适。。由于给出的是中序遍历,所以设遍历中的第i个为根,则有第1到i-1为左子树的中序遍历,第i+1到n为右子树的中序遍历,这样就找到了最优子结构的性质,对于每一个中序遍历我们只需要枚举它的根即可。设f[i][j]为i到j作为中序遍历时的最大得分,则可以得到状态转移方程f[i][j]=max(f[i][k-1]*f[k+1][j])+point[k],i<=k<=j。

代码(很久以前写的,略丑):

programpointtree(input,output);
var f:array[0..35,0..35]of longint;
a:array[0..35]of longint;
n,i,j,k,max:longint;
procedure findmax(s,e:longint);
var i,k,max:longint;
begin
max:=0;k:=-1;
for i:=s to e do
 if f[s,i-1]*f[i+1,e]+a[i]>max then beginmax:=f[s,i-1]*f[i+1,e]+a[i];k:=i;end;
if k<>-1 then
 begin
  write(k,' ');
  findmax(s,k-1);
  findmax(k+1,e);
 end;
end;
begin
assign(input,'pointtree.in');
reset(input);
readln(n);
filldword(f,sizeof(f)div 4,1);
for i:=1 to n do
 begin
  read(a[i]);
  f[i,i]:=a[i];
  f[i-1,i]:=a[i-1]+a[i];
 end;
for i:=3 to n-1 do
 for j:=1 to n do
  for k:=j to j+i-1 do
   iff[j,k-1]*f[k+1,j+i-1]+a[k]>f[j,j+i-1] thenf[j,j+i-1]:=f[j,k-1]*f[k+1,j+i-1]+a[k];
max:=0;
for i:=1 to n do
 if f[1,i-1]*f[i+1,n]+a[i]>max thenmax:=f[1,i-1]*f[i+1,n]+a[i];
writeln(max);
findmax(1,n);
close(input);
end.


【WorkBuddy专栏15】灵感被折叠到「更多」里,真的不重要了吗?——一个「被低估」功能的当下价值与未来演变 阅读详情

相关推荐

逆向实战:360加固DEX解密全流程解析(附Frida脚本与SoFixer修复技巧)

本文深入解析360加固DEX解密的全流程,涵盖动态Hook技术、Frida脚本应用及SoFixer修复技巧。通过实战案例详细展示如何识别加固特征、定位关键函数、实现ELF文件修复,并解析RC4和zlib解密算法,为逆向工程师提供全面的技术指导。

weixin_29323551的博客 610

洛谷【P1404】加分二叉树

洛谷【P1404】加分二叉树题目描述设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下:subtree的左子树的加分× subtree的右子树的加分+subtree的根的分数。若某个子树

George__Yu的博客 692

LLC谐振变换器中的软开关艺术:ZVS与ZCS的协同设计

本文深入解析了LLC谐振变换器如何通过巧妙的电路设计,协同实现零电压开关(ZVS)与零电流开关(ZCS),从而大幅降低开关损耗与电磁干扰,提升电源效率。文章结合设计实战,详细阐述了谐振参数计算、器件选型及调试避坑指南,为高效、高功率密度电源设计提供了核心思路与解决方案。

weixin_29216957的博客 350

[NOIP2003 提高组] 加分二叉树

如果该题你认真思考的话,熟知树的结构,那是有很大几率可以做出来的。 祝大家早日AC! The End~

wo_ai_luo_的博客 1095

VINS-Fusion实战:从零搭建无人机视觉惯性导航系统(附ROS配置指南)

本文提供了一份详尽的VINS-Fusion实战指南,涵盖从硬件选型、传感器标定到ROS节点配置与参数调优的全过程。重点解析了如何将VINS-Fusion视觉惯性里程计系统与PX4飞控深度集成,并实现室外GPS融合,旨在帮助开发者从零搭建稳定、高精度的无人机视觉惯性导航系统。

lll78的博客 865

fMRI原始数据分割的笔记

好记性不如烂笔头_fMRI小白入门笔记

ZY_brain的博客 2896

Cpp环境【NOIP2003 P3】【Vijos1100】【Code[VS]1090】【CQYZOS2816】加分二叉树

【问题描述】   设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下:   subtree的左子树的加分× subtree的右子树的加分+subtree的根的分数 若某个子树为

天地皆逆旅,你我本行人。 624

AI编程工具选哪个更高效?开发者深度评测

无论是代码生成、错误修复,还是架构设计,AI都能提供强大的辅助能力。然而,市面上AI编程工具众多,如何选择最适合自己的?本文将从代码质量、响应速度、多语言支持、集成能力等多个维度,为你解析2025年最主流的几款AI编程工具,帮助你做出更高效的选择。根据2025年最新调研数据,全球超过85%的开发者正在使用AI编程工具辅助开发,相比2023年增长了近40%。合理利用AI,能让你的开发效率提升数倍,但真正的核心竞争力,仍然在于你的编程思维和解决问题的能力。:技术较强的开发者、重视数据隐私的企业。

1855

加分二叉树(感觉像是区间dp)

【问题描述】 设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。 每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都 有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下: subtree的左子树的加分× subtree的右子树的加分+subtree的根的分数

qq_31457873的博客 865

手把手教你玩转CPU微架构专栏--​​​​第二章:流水线——微架构的“效率引擎”​​​​2.4 超标量与超线程:如何突破“单指令流”的限制?

例如,Intel酷睿i5-13600K拥有6个性能核(P核,支持超线程,共12线程)和8个能效核(E核,无超线程,共8线程),兼顾多线程性能与能效比。通过引入“物理寄存器”替代“逻辑寄存器”(如x86的RAX、RBX),消除数据冒险中的“假依赖”(False Dependency)。引入“混合架构”(Performance Core+Efficient Core),大核(P核)专注高性能任务,小核(E核)处理后台任务;​:6发射超标量,IPC≈3.5(通过3D V-Cache优化缓存,进一步提升效率)。

xiaoheshang_123的博客 955

ArcGIS Pro符号化教程

本文详细介绍了ArcGIS Pro的软件设置和符号化操作步骤。主要包括:1)设置默认工程目录和关闭地图自动加载;2)创建新工程的基本流程;3)点要素的单一符号化方法,包括样式修改和图层调整;4)图表符号显示过滤器的使用,涉及字段添加、图表类型选择和背景设置。文章还提供了操作截图和数据下载链接,适合GIS初学者学习ArcGIS Pro的基础符号化操作。

WwLK123的博客 549

【基础练习】【区间DP】codevs1090 加分二叉树题解

2003 NOIP TG 题目描述 Description 设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第j个节点的分数为di,tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下: subtree的左子树的加分× subtree的

西家家 2160

SerDes系列之FFE均衡技术

FFE的基本结构可以在RX侧或TX侧实现,其基本工作原理相同:它通过从同一信号源应用适当的延迟来产生多径信号,然后对它们进行线性缩放和组合以消除信道ISI。

一只豌豆象的博客 4242

【蓝桥杯冲冲冲】动态规划学习 [NOIP2003 提高组] 加分二叉树

【蓝桥杯冲冲冲】动态规划学习 [NOIP2003 提高组] 加分二叉树

Kirara的博客 1424

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

P1040 [NOIP2003 提高组] 加分二叉树题解(动态规划)

摘要:给定节点数为n的二叉树中序遍历序列(1,2,...,n),每个节点有分数di。计算加分值:非空子树加分为左子树加分×右子树加分+根节点分数,空子树加分为1。要求构造加分最高的二叉树,输出最高加分和前序遍历序列。使用动态规划,通过二维数组记录区间最优解和根节点位置,最终输出结果。时间复杂度O(n^3),适用于n≤30的情况。

2403_87013629的博客 188

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

CJOJ 1010【NOIP2003】加分二叉树 / Luogu 1040 加分二叉树(树型动态规划)

CJOJ 1010【NOIP2003】加分二叉树 / Luogu 1040 加分二叉树(树型动态规划) Description 设 一个 n 个节点的二叉树 tree 的中序遍历为( 1,2,3,…,n ),其中数字 1,2,3,…,n 为节点编号。每个节点都有一个分数(均为正整数),记第 j 个节点的分数为 di , tree 及它的每个子树都有一个加分,任一棵子树 subtree (...

dipinzhu4111的博客 167

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

NuptOJ1039加分二叉树——树形动态规划

加分二叉树 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte 总提交:105            测试通过:33 描述 设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第j个节点的分数为dj,tree及它的每个子树都有一个加分,任一

我的博客 966

noip2003 加分二叉树 (树形dp+分治法,已知中序,输出前序)

P1100加分二叉树 Accepted 标签:动态规划 树形DPNOIP提高组2003 描述 设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都有一个加分,任一棵子树subtree

把复杂的事情简单描述 917

DP - 区间DP(求具体方案) - NOIP 2003 - 加分二叉树

DP - 区间DP - NOIP 2003 - 加分二叉树 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号。 每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下: subtree的左子树的加分 × subtree的右子树的加分 + ...

njuptACMcxk的博客 353

[NOIP2003]加分二叉树 --动态规划-类似矩阵相乘

http://www.rqnoj.cn/Problem_49.html 题目:[NOIP2003]加分二叉树 问题编号:49  题目描述 设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第j个节点的分数为di,tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tr

legan的专栏 1017

【原题】【noip 2003 T2】【动态规划】加分二叉树

问题 描述 Description 设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下: subtree的左子树的加分× subtree的右子树的加分+subtree的根的分数 若...

weixin_30493401的博客 141

ACM 106. [NOIP2003] 加分二叉树(区间dp)

106. [NOIP2003] 加分二叉树 ★☆   输入文件:jfecs.in   输出文件:jfecs.out   简单对比 时间限制:1 s   内存限制:128 MB 【问题描述】 设 一个 n 个节点的二叉树 tree 的中序遍历为( l,2,3,…,n ),其中数字 1,2,3,…,n 为节点编号。每个节点都有一个分数(均为正整数),记第 j 个节点的分数为 di , tr

seektheworld 428

vijos1100 加分二叉树 ( dp)

dp[l,r] =max(dp[l,k]*dp[k+1,r] + G[k] ) l<=k<r 用一个G[l][r] 的数组记录路径 , 在打印的时候也用递归 描述 设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字 1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子...

aiezhen1717的博客 134

NOIP2003-加分二叉树-dp-区间型动态规划

题目地址:https://vijos.org/p/1100 描述 设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下: subtree的左子树的加分× subtree的右

ly59782的博客 621

【NOIP2003提高组】加分二叉树

题目背景 NOIP2003 提高组第3题。 题目描述 设一个 n 个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字 1,2,3,…,n 为节点编号。每个节点都有一个分数(均为正整数),记第 j 个节点的分数为 di, tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下:      subtree的左子树的加分 × sub...

ETO的博客 1627
上一篇: CH Round#58 OrzCC杯noip模拟赛day2-树的问题
下一篇: [NOIP2003]传染病控制【搜索】
Tag_king
博客等级 码龄12年 15粉丝 164原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值