秋招突击——算法——模板题——区间DP(1)——加分二叉树

文章目录

        • 题目描述
        • 思路分析
        • 实现代码
        • 分析总结

题目描述

在这里插入图片描述

思路分析

在这里插入图片描述

在这里插入图片描述

实现代码
  • 不过我的代码写的真的不够简洁,逻辑不够清晰,后续多练练吧。
// 组合数问题
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 35;
int n,f[N][N],g[N][N],w[N];
// f[i][j]表示区间i到j的构成的二叉树最大的加数
// g[i][j]表示区间i到j的构成最大加数二叉树的根节点的坐标
// w[i]表示第i个节点的权值

void dfs(int l,int r){
    if(l > r) return;
    int k = g[l][r];
    cout<<k<<" ";
    dfs(l,k-1);
    dfs(k + 1,r);

}

int main(){
    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;

            // 左右节点相等,不用额外尽心遍历
            if (i == j) f[i][j] = w[i],g[i][j] = i;
            else{
                // 遍历划分节点,总共是三种情况
                for (int k = i; k <= j; ++k) {
                    int score = 0;
                    if (k == i){
                        // 划分节点在左端点,没有左子节点
                        score = w[k] + f[ k + 1][j];
                    }

                    else if (k == j){
                        // 划分节点在右端点,没有右子节点
                        score = w[k] + f[i][k - 1];
                    }

                    else
                    {
                        // 划分节点在中间,左右子节点都有
                        score = w[k] + f[i][k - 1] * f[k + 1][j];
                    }
                    // 记录顶点节点
                    if(f[i][j] < score) {
                        f[i][j] = score;
                        g[i][j] = k;
                    }

                }
            }
        }
    }

    cout<<f[1][n]<<endl;
    dfs(1,n);

};
分析总结
  • 在这里要知道一些关于前序、后序还有中序转换的问题,既然考到了,但是我一点都想不起来。
  • 思路分析很重要

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

聚星宇学电商:现在开一家抖音网店真的好做吗

在数字经济的浪潮中&#xff0c;抖音以其强大的流量优势成为众多创业者眼中的“香饽饽”。然而&#xff0c;开一家抖音网店是否真的好做?这个问题值得我们深入探讨。 不可否认的是&#xff0c;抖音平台汇聚了海量的用户基础和丰富的社交属性&#xff0c;为商家提供了一个广阔的…

【Linux】Centos7安装RabbitMQ

【Linux】Centos7安装RabbitMQ 下载 从 rabbitmq 的 GitHub 仓库下载 https://github.com/rabbitmq/rabbitmq-server/releases rabbitmq 是 erlang 语言编写的&#xff0c;需要先安装 erlang https://github.com/rabbitmq/erlang-rpm/releases 安装 使用rz命令上传 erlang 和 …

【linux】yumvim工具理解使用

目录 Linux 软件包管理器 yum 关于 rzsz 注意事项 查看软件包 Linux开发工具 Linux编辑器-vim使用 vim的基本概念 vim的基本操作 vim正常模式命令集 vim末行模式命令集 简单vim配置 配置文件的位置 sudo提权 Linux 软件包管理器 yum 1.yum是什么&#xff1…

Jenkins动态slave

目录 所需环境 安装nfs 部署Jenkins 安装插件 ​编辑添加凭据 配置动态slave 连接kubernetes集群 ​编辑配置Jenkins地址 ​编辑配置Pod模板 ​编辑确认代理端口 创建任务测试 在当今软件开发生命周期中&#xff0c;持续集成/持续部署&#xff08;CI/CD&#xff09;已…

软件测试面试会问哪些问题?(二)

三、测试理论论 3.1 你们原来项目的测试流程是怎么样的 我们的测试流程主要有三个阶段&#xff1a;需求了解分析、测试准备、测试执行。 1、需求了解分析阶段 我们的 SE 会把需求文档给我们自己先去了解一到两天这样&#xff0c;之后我们会有一个需求澄清会议&#xff0c;我们会…

es数据备份和迁移Elasticsearch

Elasticsearch数据备份与恢复 前提 # 注意&#xff1a; 1.在进行本地备份时使用--type需要备份索引和数据&#xff08;mapping,data&#xff09; 2.在将数据备份到另外一台ES节点时需要比本地备份多备份一种数据类型&#xff08;analyzer,mapping,data,template&#xff09; …

计算机缺失ffmpeg.dll如何修复,五种详细的修复教程分享

当你在使用电脑过程中&#xff0c;突然遇到系统或软件弹出提示信息&#xff0c;告知“ffmpeg.dll文件丢失”怎么办&#xff1f;当电脑提示ffmpeg.dll丢失时&#xff0c;可能会导致一些应用程序无法正常运行或出现错误提示。下面我将介绍5种解决电脑提示ffmpeg.dll丢失的方法。 …

142.栈和队列:用栈实现队列(力扣)

题目描述 代码解决 class MyQueue { public:stack<int> stIn; // 输入栈&#xff0c;用于push操作stack<int> stOut; // 输出栈&#xff0c;用于pop和peek操作MyQueue() {}void push(int x) {stIn.push(x); // 将元素压入输入栈}int pop() {// 如果输出栈为空&…

16. Elasticsearch面试题汇总

Java全栈面试题汇总目录-CSDN博客 1. 什么是Elasticsearch? Elasticsearch是一个基于Lucene的搜索引擎。它提供了具有HTTP Web界面和无架构JSON文档的分布式&#xff0c;多租户能力的全文搜索引擎。 Elasticsearch是用Java开发的&#xff0c;根据Apache许可条款作为开源发布…

Docker镜像源自动测试镜像速度,并选择速度最快的镜像

国内执行如下代码 bash <(curl -sSL https://gitee.com/xjxjin/scripts/raw/main/check_docker_registry.sh)国外执行如下代码 bash <(curl -sSL https://github.com/xjxjin/scripts/raw/main/check_docker_registry.sh)如果有老铁有比较不错的镜像源&#xff0c;可以提…

局域网传文件怎么操作?轻松实现文件共享!

在现代的办公和生活中&#xff0c;局域网传文件已经成为一种非常常见和方便的方式&#xff0c;可以快速、安全地在局域网内进行文件传输。无需依赖互联网&#xff0c;局域网传文件可以帮助团队成员之间共享文件、备份数据、进行协作等。本文将介绍三种常见的方法&#xff0c;帮…

word-形状绘制、smartart、visio

一、人员架构图绘制 小技巧&#xff1a; 1、ctrlshift水平复制 2、点击图形&#xff0c;右键设置为默认形状 3、插入-形状-右键-锁定绘图模式&#xff0c;按esc退出状态 4、插入-形状-新建绘图画布&#xff0c;代替组合问题 画布中存在锚点&#xff0c;便于直线连接 二、s…

掌握一个面试小心机,就业离你只差这一步!

马上进6月份&#xff0c;大家是已经在工作岗位上了&#xff0c;还是正在面试呀&#xff01;不知道大家在面试过程中有没有遇到这样的问题&#xff0c;面试完几家公司之后进行总结&#xff0c;还是不知道自己为什么被pass掉&#xff0c;今天小编带大家搞清测试岗位面试的底层逻辑…

Centos7.9安装openldap和phpldapadmin

文章目录 一、背景二、正文2.1 安装openldap2.2 修改openldap配置2.3 安装phpldapadmin2.4 登录phpldapadmin界面 三、安装途中可能碰到的报错错误场景1&#xff1a;执行步骤“安装openldap”途中碰到的错误&#xff0c;即执行命令&#xff1a;systemctl start slapd报错错误场…

【Day7:JAVA面向对象的初级使用】

目录 1、类和对象1.1 类的介绍1.2 类和对象的关系1.3 类的组成 2、对象内存图2.1 单个对象内存图2.2 两个对象内存图2.3 两个引用指向相同内存图 3、成员变量和局部变量3.1 成员变量和局部变量的区别 4、this关键字4.1 this可以解决的问题4.2 this介绍4.3 this内存图4.4 this总…

Python 新手最容易踩的坑

Python新手最容易踩的坑 缩进错误忘记引入模块使用未定义的变量不理解变量作用域字符串格式化错误乱用关键字多余的符号本期图书推荐&#xff1a;Python算法小讲堂---39个算法案例带你玩转Python内容简介获取方式 在学习 Python 的过程中&#xff0c;新手往往会遇到一些常见的陷…

【四、性能测试】Linux stress 压力模拟测试工具

在做 CPU 问题解析之前&#xff0c;需要先了解一下压力模拟工具&#xff0c;可以将 CPU、MEM、IO 等进行压力模拟&#xff0c;可以在模拟压力的过程中进行问题解析 一、STRESS 模拟对CPU、Memory、IO、磁盘进行压力测试。可以使用 stress 工具&#xff0c;它是专门针对 linux…

部署yum仓库及NFS共享

yum概述 yum 1&#xff09;基于RPM包构建的软件更新机制 2&#xff09;可以自动解决依赖关系 3&#xff09;所有软件包由集中的YUM软件仓库提供 准备安装源 一键安装软件包的工具&#xff1a; RHEL、CentOS yum dnf Ubuntu、Debian apt apt-get 好处&#xff1a;…

GitKraken克隆Git仓库

克隆Git仓库 修改本地仓库 在此新增了一个test.txt文件 GitKraken提醒有一处改变 暂存&#xff08;Stage&#xff09;该文件&#xff0c;添加描述后提交修改&#xff1a; 修改成功&#xff1a;

(一)vForm 动态表单设计器之使用

系列文章目录 &#xff08;一&#xff09;vForm 动态表单设计器之使用 文章目录 前言 一、VForm是什么&#xff1f; 二、使用步骤 1.引入库 2.使用VFormDesigner组件 3.使用VFormRender组件 4.持久化表单设计 总结 前言 前段时间在研究Activiti工作流引擎&#xff0c;结合业务…