479. 加分二叉树
时间:2021-04-17
本文章向大家介绍479. 加分二叉树,主要包括479. 加分二叉树使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目链接:https://www.acwing.com/problem/content/481/
思路:因为在中序遍历中,每一棵子树在序列中是连续的一段
所以可以考虑区间dp来计算1~n的合并顺序 dp[i][j] 代表从i~j的一棵二叉树的最大值
然后以根节点k来作为划分子集的依据 每次可以用左子树×右子树 来更新 记得特判边界的问题
因为要输出方案 所以 用g[i][j] 代表i~j这一段的根节点是谁 然后先序递归的时候 输出根节点即可
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e2+10; 4 const int mod=1e9+7; 5 #define ll long long 6 #define ull unsigned long long 7 #define pi pair<int,int> 8 #define fi first 9 #define sc second 10 #define pb push_back 11 12 int dp[maxn][maxn]; 13 int w[maxn]; 14 int g[maxn][maxn]; 15 16 17 void dfs(int l,int r) 18 { 19 int rt=g[l][r]; 20 cout<<rt<<" "; 21 if(l<rt) dfs(l,rt-1); 22 if(r>rt) dfs(rt+1,r); 23 } 24 25 26 int main() 27 { 28 ios::sync_with_stdio(false); 29 cin.tie(0); 30 int n; 31 cin>>n; 32 for(int i=1;i<=n;i++) cin>>w[i]; 33 for(int len=1;len<=n;len++) 34 { 35 for(int i=1;i+len-1<=n;i++) 36 { 37 int j=i+len-1; 38 if(len==1) dp[i][j]=w[i],g[i][j]=i; 39 else 40 { 41 for(int k=i;k<=j;k++) 42 { 43 int l=k==i?1:dp[i][k-1]; 44 int r=k==j?1:dp[k+1][j]; 45 46 int tmp=l*r+w[k]; 47 if(tmp>dp[i][j]) 48 { 49 dp[i][j]=tmp; 50 g[i][j]=k; 51 } 52 } 53 } 54 } 55 } 56 cout<<dp[1][n]<<'\n'; 57 dfs(1,n); 58 59 60 61 62 63 64 65 }
原文地址:https://www.cnblogs.com/winfor/p/14670949.html
- 数据结构 图
- ASP.NET Core的配置(5):配置的同步[ 实例篇]
- TensorFlow 深度学习笔记 卷积神经网络
- 利用EntLib授权机制实现对ASP.NET页面的自动授权
- ASP.NET Core的配置(5):配置的同步[设计篇]
- 详解Redis内部运作机制
- TensorFlow深度学习笔记 循环神经网络实践
- 从客户端Web应用程序访问Bluemix服务
- 云改变传统银行业面貌的5种方式
- ASP.NET MVC中的ActionFilter是如何执行的?
- C语言嵌入式系统编程修炼之屏幕操作
- max-width:100%在td或者table-cell里渲染不符合预期小笔记
- ASP.NET Core中的依赖注入(2):依赖注入(DI)
- 使用Ansible自动化您的(云或者本地)机器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用深度学习模型创作动漫故事,比较LSTM和GPT2的文本生成方法
- 聊聊BitCaskLock
- LightGBM的参数详解以及如何调优
- 聊聊BitCaskKeyDir
- 使用2D卷积技术进行时间序列预测
- 在PyTorch中使用DistributedDataParallel进行多GPU分布式模型训练
- 同城双活与异地多活架构分析
- leetcode多线程之按序打印
- leetcode多线程之交替打印FooBar
- leetcode链表之反转链表
- leetcode链表之合并两个排序的链表
- leetcode链表之找出倒数第k个节点
- ZooKeeper能解决什么问题?不能解决什么问题?
- 画解算法 77-组合
- Spring 源码系列之容器概览~