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

Nacos2.X 源码分析:为订阅方推送、服务健康检查、集群数据同步、grpc客户端服务端初始化 而Nacos2.X 从http请求改为了grpc请求的方式了,在健康检查这方面就是基于长连接来实现的。客户端发送心跳是在构建grpc连接时会有一个线程每隔5s发送一次,NacosClient端发送心跳的代码在。我们能大致猜测:当一个服务的实例进行了更新,那么是不是应该推送给所有订阅了该服务的客户端?当我订阅了某个服务,是不是应该将该服务信息推送给我?在服务实例检查检查流程中,如果出现了要注销的服务实例就会发布。在服务发现时,进行订阅服务的最后会发布一个。服务注册与服务订阅流程中发布的事件最终会被。 阅读详情
【问题描述】

  设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第i个节点的分数为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个用空格隔开的整数,为该树的前序遍历。
 

【输入样例】

  5
  5 7 1 2 10

【输出样例】

  
  145
  3 1 2 4 5

【数据范围】

  n<=30
  每个节点的分数<=100

【思路梳理】

比较强势的动态规划,第一个问比较容易解决,相信读者可一直直接设计出如下的状态函数:

d[i][j]=在第i个点至第j个点建立加分二叉树所能够获得的最大分数值
d[i][j]=max{d[i][x-1]*d[x+1][j]+score[x] |i<=x<=j}

此处的x枚举的是当前区间的根节点,因为输入时是该树的中序遍历,那么显然i~x-1个节点是该区间内的左子树,x+1~j是该区间的右子树,那么左右两棵子树的分值相乘,加上根节点i的分值即可。需要注意的是空子树的特殊情况。什么时候会出现空子树?就是说空子树对应的中序遍历序列为空或者不存在,那么也就是说其对应的中序序列为a[m]~a[m-1]即可,所以我们的x根节点枚举范围是i~j。

【Cpp代码】
#include<cstdio>
#include<cstring>
#include<iostream>
#define maxn 35
using namespace std;
int n,score[maxn],fa[maxn][maxn],g[maxn][2];
long long d[maxn][maxn];

void back_track(int left,int right)
{
    if(right<left)  return;
    int subroot=fa[left][right];
    cout<<subroot<<" ";
    back_track(left,subroot-1);
    back_track(subroot+1,right);
}

void dp()
{
    //d[i][j]=在第i个~第j个点建立加分二叉树所能够获得的最大分数值
    //d[i][j]=max { d[i][x-1]*d[x+1][j]+score[x] |i<=x<=j} 
    for(int i=1;i<=n;i++)   d[i][i]=score[i],fa[i][i]=i;
    //f[i][j]=在下标为i~j一段的根节点

    for(int lens=2;lens<=n;lens++)
    for(int i=1;i<=n;i++)
    {
        int j=lens+i-1;
        if(j>n) break;

        long long &t=d[i][j];
        for(int x=i;x<=j;x++)
        {
            long long leftscore=d[i][x-1]==0 ? 1 :d[i][x-1];
            long long rightscore=d[x+1][j]==0? 1 :d[x+1][j];
            long long m=leftscore*rightscore+d[x][x];
            if(t>=m)    continue;
            fa[i][j]=x;
            t=m;
        }
    }

    cout<<d[1][n]<<endl;
    back_track(1,n);
}

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)   scanf("%d",&score[i]);
    dp();
    return 0;
}
【人工智能】Claude服务访问受限报错的技术分析与解决方案 在使用Claude系列大模型服务的过程中,部分用户会遇到服务不可用的标准化拦截提示,导致无法正常访问模型核心能力。本文针对该类报错进行完整技术拆解,明确报错根因与底层校验逻辑,并分场景提供合规、可落地的排查与解决方案,同时规避相关使用风险。 阅读详情

相关推荐

基于Android13的系统启动流程分析(三)之FirstStageMain阶段

init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属性服务等。init进程是由多个源文件共同组成的,这些文件位于源码目录system/core/init1. Bootloader 引导当按下设备电源键时,最先运行的就是 bootloader(固化在ROM的程序),bootloader 的主要作用就是硬件设备(如 CPU、flash、内存)的初始化并加载到RAM,通过建立内存空间映射,为装载 Linux 内核做好准备,。

q1210249579的博客 5496

【题解】加分二叉树

题目 题目描述 设一个 nnn 个节点的二叉树tree\text{tree}tree 的中序遍历为(1,2,3,\ldots,n)(1,2,3,…,n),其中数字 1,2,3,\ldots,n1,2,3,…,n 为节点编号。每个节点都有一个分数(均为正整数),记第 ii 个节点的分数为 d_id i ​ ,\text{tree}tree 及它的每个子树都有一个加分,任一棵子树 \text{subtree}subtree(也包含 \text{tree}tree 本身)的加分计算方法如下: \text{sub

tanfuwen_的博客 2772

遥感影像分割实战:LoveDA数据集从下载到训练全流程指南(附避坑技巧)

本文以LoveDA数据集为例,提供了一份详尽的遥感影像语义分割实战指南。内容涵盖从数据下载、理解与预处理,到环境配置、模型选择与训练,再到性能调优与部署的全流程,并重点分享了多个关键环节的避坑技巧,旨在帮助开发者和研究者高效上手并解决实际问题。

cherry的博客 929

树的顺序遍历的应用

树的顺序遍历分为先序遍历、中序遍历、后序遍历三种(如果没有了解过,请参见此处) 上次已经说过,有关树的顺序遍历的题目还是有点思维难度的,我们先来看一下 题目链接A 加分二叉树 题目描述 Description 设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第j个节点的分数为di,tree及...

bangwo9535的博客 310

游戏封包抓取实战:雷电模拟器+ProxyDroid+查尔斯3.93+WPE全流程解析

本文详细解析了使用雷电模拟器、ProxyDroid、查尔斯3.93和WPE进行游戏封包抓取的全流程实战。通过环境搭建、代理配置与工具协同,手把手教你抓取HTTP/HTTPS及原始Socket数据,涵盖从流量转向、证书安装到数据分析和常见问题排查,是学习游戏网络协议分析与安全测试的实用指南。

u8v9w0x1y的博客 441

BEVFusion(mit)最强环境安装,部署复现

BEVFusion作为一项经典的工作,值得深入探索。然而由于配置环境比较麻烦,耽误了一些时间。经过几次成功配置之后,有了一些总结,在这里记录下来,供大家参考避坑,也方便自己下次查阅。

qq_45783225的博客 1万+

acwing479. 加分二叉树(区间dp)

题意 设一个nn个节点的二叉树 tree 的中序遍历为(1,2,3,…,n1,2,3,…,n),其中数字1,2,3,…,n1,2,3,…,n为节点编号。 每个节点都有一个分数(均为正整数),记第ii个节点的分数为didi,tree 及它的每个子树都有一个加分,任一棵子树 subtree(也包含 tree 本身)的加分计算方法如下:      subtree的左子树的加分××subtree的右子树的加分++subtree的根的分数  若某个子树为空,规定其加分为11。 叶子...

qq_52994629的博客 740

支付系统保证可靠性的秘诀 ----- 订单的补偿和补单

文章目录WHAT? 前言WHY? 为什么要用多级缓存?HOW 怎么做?方案 版本1:数据库存储专线配置通过优先级进行动态上下线方案 版本1 劣势:方案 版本2 :本地缓存替代数据库方案 版本2 劣势:方案 版本3:分布式缓存做自动补偿方案 版本3 总结:Where 分布式多级缓存还能用在哪些地方?总结 WHAT? 前言 刚入职场的时候觉得支付宝等第三方支付系统好强大,要保证这么多的交易不能错,也不能重复还要保证正确的扣钱,直到后面接触订单系统以及第三方支付公司的核心交易系统后才真正窥探到了支付系统的核心

boboaisisi的专栏 3534

【洛谷P1040】【ssl1033】加分二叉树【树形记忆化搜索】

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

ssllyr 321

SpringAi 通过大模型来实现调用自己的Api

摘要 本文介绍了如何利用Spring AI的Tools机制扩展大模型能力,实现业务系统集成。通过@Tool和@ToolParam注解定义工具方法,将订单查询和关闭功能暴露给大模型调用。关键实现包括:1)使用详细描述标注工具方法和参数;2)在ChatClient中注册工具服务;3)集成对话记忆保持上下文。该方法使AI具备操作业务系统的能力,形成"认知-决策-执行"闭环,大幅提升了模型在实际业务场景中的应用价值。

又要搬砖了 835

uniapp - 超详细的 H5 公众号网页微信登录示例代码,提供从 0-1 公众号配置及详细注释代码(站在新手小白的角度)第三方微信授权登录的实现!!

uniapp微信浏览器H5授权微信登录,UniApp开发H5接入微信登录的全过程,uniapp的H5页面使用微信登录,uniapp H5微信授权登录,H5之微信授权登陆 (uniapp网页版微信授权登录),uni-app开发H5第三方微信授权登录的实现,uniapp如何实现微信授权登录,公众号H5页面接入微信登录流程,uni-app - 最详细 H5 网页接入微信登录功能,提供公众号配置与详细注释示例代码(移动端网页实现点击登录按钮后 调用微信公众号授权登录功能 详细讲解接入流程与详细示例代码)官方最新超级

✅ 精选推荐文章 1万+

P1040 加分二叉树 题解(dfs 深度优先搜索)

P1040 加分二叉树题目分析代码所以我们的状态转移方程传送门 题目 设一个nn个节点的二叉树tree的中序遍历为(1,2,3,…,n1,2,3,…,n),其中数字1,2,3,…,n1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第ii个节点的分数为di,treedi,tree及它的每个子树都有一个加分,任一棵子树subtreesubtree(也包含treetree本身)的加分...

weixin_43570185的博客 506

【Claude Code的Harness Engineering实现】:06-记忆系统(Memory)

记忆系统是Claude Code实现跨会话持久化和上下文保持的核心组件。它分为短期记忆(当前会话的对话历史)和长期记忆(跨会话保留的结构化信息),通过多层级的文件系统实现灵活的记忆管理。

rengang66的博客 240

[NOIP2003 提高组] 加分二叉树

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

wo_ai_luo_的博客 1095

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

洛谷【P1404】加分二叉树

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

George__Yu的博客 691

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

加分二叉树

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

Rookie的博客 6271

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

加分二叉树[记搜]

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

BIGBIGPPT的博客 294

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

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

qq_31457873的博客 865

洛谷P1040 加分二叉树

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

weixin_38199770的博客 309

动态规划加分二叉树问题

动态规划加分二叉树问题 题目描述 设一个 n个节点的二叉树tree 的中序遍历为(1,2,3,…,n),其中数字 1,2,3,…,n 为节点编号。每个节点都有一个分数(均为正整数),记第 ii 个节点的分数为 di,tree 及它的每个子树都有一个加分,任一棵子树 subtree(也包含 tree 本身)的加分计算方法如下: subtree 的左子树的加分 X subtree 的右子树的加分 + subtree 的根的分数。 若某个子树为空,规定其加分为 1,叶子的加分就是叶节点本身的分数。不考虑它的空子树

qq_41117896的博客 1299

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

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

西家家 2160

【NOIP】加分二叉树

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

A793488316的博客 1061

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

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

Tag_king的专栏 2325

2021.06.03加分二叉树

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

Zack_zc_zc的博客 819

洛谷P1040 加分二叉树(区间DP)

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

一只快乐的小蒟蒻~ 304
上一篇: Cpp环境【TYVJ1153】【Code[VS]4093】【CQYZOJ16874】 间谍网络
下一篇: Cpp环境【POJ2435】【CQYZOJ3034】【USACO2005 U S Open Silver】Navigating the City城市交通
cqyz_Lebmond
博客等级 码龄10年 18粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值