加分二叉树(信息学奥赛一本通- P1580)(洛谷-P1040)
一、 题目分析在信息学奥赛的早期真题中NOIP 2003 的《加分二叉树》是一道具有代表性的好题。题面看似是在考查二叉树的构建与遍历但它却给出了一个很致命、也是破局核心的条件“二叉树的中序遍历为 (1, 2, 3, ..., n)”在数据结构中中序遍历的顺序是“左子树 → 根 → 右子树”。既然整棵树的中序遍历是连续的 1 到 n这就意味着一个物理定律对于树上的任意一棵子树它所包含的所有节点编号在物理上绝对构成一段连续的区间 [i,j]一旦清楚这一点这道题的图论外衣就被彻底扒下露出了它区间DP的真实面目。二、 核心状态定义与转移方程既然是处理连续区间我们直接套用区间DP的经典模型状态定义设 dp[i][j] 表示由编号i到j的节点所组成的子树能获得的最高加分。记号本状态溯源题目不仅要求最高分还要求输出前序遍历。我们额外开一个数组root[i][j]记录区间 [i,j] 取得最高分时是哪个节点k当了树根。转移策略枚举断点打擂台 对于区间 [i,j]我们不知道谁当根节点收益最大。因此我们让区间内的每一个节点 k (i≤k≤j) 都轮流“坐庄”当一次根节点。 当k为根时区间被完美切割左子树是 [i,k−1]右子树是 [k1,j]。根据题意“加分左子树加分×右子树加分根节点分数”得出状态转移方程dp[i][j]max(dp[i][j],dp[i][k−1]×dp[k1][j]a[k])三、 四个易错点区间DP的代码骨架很短但极其容易在初始化和边界上死循环。以下四个坑点都是校队同学真实出错的地方空子树的合法性越界陷阱当选定最左侧节点i当根时左子树区间变为 [i,i−1]。这是一个空树。题目规定空子树加分为 1。所以必须初始化 dp[i][i−1]1。注意当选定最右侧节点 n 当根时右子树变为 [n1,n]所以初始化的循环必须开到n1以防越界。叶子节点的独立性避免公式误伤题目规定“叶子的加分就是叶节点本身的分数”。如果我们让长度len1的区间也进入转移方程就会多乘上两个空子树的1导致分数计算错误。最稳妥的做法是手动初始化长度为1的区间dp[i][i]a[i]且root[i][i]i主循环从len2开始。右端点的当根权枚举根节点k时必须是for(int ki;kj; k)绝不能漏掉等号。二叉树允许只有左子树没有右子树的偏瘫形态最右边的节点 j 完全有资格当树根。整数溢出数据类型陷阱题目明确说明最高加分可能不超过 4×10^9。这个数值已经超过了32位有符号整型int的极限约 21.4 亿。因此dp数组必须果断开long long否则虽然信息学奥赛一本通能过但是实际上如果样例大一点是会出错的。四、 完整代码#include iostream using namespace std; int n; int a[35];//记录每个节点的原本分数 long long dp[35][35];//dp[i][j]代表i-j区间内最高加分 int root[35][35];//记录i和j区间取得最高分时的最优根节点 //输出前序遍历 void print(int l,int r){ if(lr) return;//遇到空节点就返回 int kroot[l][r];//否则就输出根 coutk ; print(l,k-1);//递归左子树 print(k1,r);//递归右子树 } int main(){ cinn; for(int i1;in;i) cina[i]; for(int i1;in1;i){//注意循环到n1防止右侧空子树越界 dp[i][i]a[i];//叶子结点的最高加分就是自己本身的分数 dp[i][i-1]1;//初始化空节点加分位1 root[i][i]i;//初始化每个节点是自己的根叶子节点当根的只能是它自己防止递归死循环 } for(int len2;lenn;len){//区间长度从2开始遍历 //枚举左端点 for(int i1;in-len1;i){ //右端点 int jilen-1; for(int ki;kj;k){//根节点 //状态转移如果l×ra大于之前加分就更新加分 //然后记录本次ij的最优根节点 if(dp[i][k-1]*dp[k1][j]a[k]dp[i][j]){ dp[i][j]dp[i][k-1]*dp[k1][j]a[k]; root[i][j]k; } } } } //输出最高加分 coutdp[1][n]endl; //递归输出先序遍历顺序 print(1,n); }

相关新闻

django内执行某个特定函数python

django内执行某个特定函数python

💻 方法一:使用 Django Shell(最适合测试和一次性任务)这是最直接的方式,你可以进入 Django 环境,像在 Python 交互式环境中一样导入并执行任何函数,非常适合调试和验证代码。bash# 1. 进入项目…

2026/7/2 20:47:12 阅读更多 →
学习使用idle和vs code书写python,

学习使用idle和vs code书写python,

我分别使用了编译式与文件式,大致了解了python的书写形式,也对idle与vs有了认识,vs书写方便但验证时看不懂,idle编译有问题,写错改起来困难,但是错误提示明显

2026/7/4 14:57:06 阅读更多 →
SSE 流式接口(FastAPI + AI 必学)

SSE 流式接口(FastAPI + AI 必学)

SSE = Server-Sent Events,服务器主动向前端推流,实现 ChatGPT 那种打字机效果。 做 AI 问答、RAG、LLM 接口,这是必写接口,没有之一。 一句话作用 前端发一次请求,后端一段一段文字源源不断返回,不用等全部生成完,体验流畅。 你看到的 “AI 逐字蹦出来”,全是 SSE。…

2026/7/4 3:16:14 阅读更多 →

最新新闻

多智能体系统安全控制与责任分配技术解析

多智能体系统安全控制与责任分配技术解析

1. 多智能体系统安全责任分配的核心挑战 在机器人集群、无人机编队等典型多智能体系统中,安全责任分配面临三个维度的核心挑战: 1.1 安全性与自主性的矛盾 传统集中式控制虽然能保证全局安全,但要求所有智能体公开完整状态信息&#xff0c…

2026/7/4 17:41:06 阅读更多 →
深度解析开源抖音下载器:3大技术优势与实战部署指南

深度解析开源抖音下载器:3大技术优势与实战部署指南

深度解析开源抖音下载器:3大技术优势与实战部署指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…

2026/7/4 17:41:06 阅读更多 →
操作系统级缓存:超越Redis的系统性能优化底层原理与实践

操作系统级缓存:超越Redis的系统性能优化底层原理与实践

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Claude 随心用,限时 5 折。 👉 点击领海量免费额度 大家好,我是专注于技术实战分享的博主。在追求极致性能的路上,我们常常将目光投向 Redis 这类明星缓存中间件…

2026/7/4 17:39:05 阅读更多 →
揭秘evbunpack:高效破解Enigma Virtual Box打包文件的专业工具

揭秘evbunpack:高效破解Enigma Virtual Box打包文件的专业工具

揭秘evbunpack:高效破解Enigma Virtual Box打包文件的专业工具 【免费下载链接】evbunpack Enigma Virtual Box Unpacker / 解包、脱壳工具 项目地址: https://gitcode.com/gh_mirrors/ev/evbunpack 当你在逆向工程或软件分析工作中遇到Enigma Virtual Box打…

2026/7/4 17:37:04 阅读更多 →
跨平台开发实战:从操作系统差异看远程控制软件适配挑战

跨平台开发实战:从操作系统差异看远程控制软件适配挑战

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Claude 随心用,限时 5 折。 👉 点击领海量免费额度 你是不是也经常遇到这样的困惑:手头一台Windows笔记本办公,家里一台Mac Mini当服务器,还有一台L…

2026/7/4 17:35:03 阅读更多 →
基于YOLOv8的字符识别系统开发与实践

基于YOLOv8的字符识别系统开发与实践

1. 项目概述这个基于YOLOv8的字母数字识别检测系统是我最近完成的一个计算机视觉项目。它能够实时检测并识别图像和视频中的36类字符(数字0-9和字母A-Z),在复杂场景下表现出色。相比传统OCR技术,这个系统最大的优势在于能够处理任…

2026/7/4 17:33:03 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻