小团有一个由N个节点组成的二叉树,每个节点有一个权值。定义二叉树每条边的开销为其两端节点权值的乘积,二叉树的总开销即每条边的开销之和。小团按照二叉树的中序遍历依次记录下每个节点的权值,即他记录下了N个数,第i个数表示位于中序遍历第i个位置的节点的权值。
之后由于某种原因,小团遗忘了二叉树的具体结构。在所有可能的二叉树中,总开销最小的二叉树被称为最优二叉树。现在,小团请小美求出最优二叉树的总开销。

/*
思路:
记忆化搜索
枚举每个a[i]为当前的根节点,搜索a[i]左边为左子节点,a[i]右边为右子节点,计算最大值
*///#include<bits/stdc++.h>
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>//memset头文件
using namespace std;const int inf = 1 << 30;
const int maxn = 310;
int vis[maxn][maxn][maxn];//备忘录
vector<int> v(maxn, 0);int dfs(int left, int right, int root)
{if (left > right)//不包括等号return 0;if (vis[left][right][root] != -1)//如果备忘录已经有数了,直接返回return vis[left][right][root];int res = inf;//在root结点为父节点时,i结点为根节点的最小开销//以当前数组第一位为根,逐个遍历可能的情况for (int i = left; i <= right; ++i){int l = dfs(left, i - 1, i);//以i为根的左子树的最小开销int r = dfs(i + 1, right, i);//以i为根的右子树的最小开销res = min(res, l + r + v[i] * v[root]);}vis[left][right][root] = res;//存在备忘录return res;
}int main()
{int n;scanf("%d", &n);for (int i = 1; i <= n; ++i)///从1开始存储{scanf("%d", &v[i]);}memset(vis, -1, sizeof vis);//将备忘录全置为-1printf("%d", dfs(1, n, 0));//假的根节点return 0;
}

美团2021-10-4最优二叉树Ⅱ相关推荐

  1. 美团2021校招笔试题 最优二叉树II

    题目: 小团有一个由N个节点组成的二叉树,每个节点有一个权值.定义二叉树每条边的开销为其两端节点权值的乘积,二叉树的总开销即每条边的开销之和.小团按照二叉树的中序遍历依次记录下每个节点的权值,即他记录 ...

  2. 美团2021校招笔试-编程题-第10场

    链接:淘汰分数_美团笔试题_牛客网 来源:牛客网 某比赛已经进入了淘汰赛阶段,已知共有n名选手参与了此阶段比赛,他们的得分分别是a_1,a_2-.a_n,小美作为比赛的裁判希望设定一个分数线m,使得所 ...

  3. leetcode刷题记录2:进度64, 2021.10.23

    文章目录 数组的度(题目编号697:[link](https://leetcode-cn.com/problems/degree-of-an-array/)) 二叉搜索树(题目编号700:[link] ...

  4. 哈夫曼树(最优二叉树)(c/c++)

    哈夫曼编码 halfman! halfman! 半人万岁!(来自权力的游戏 Tyrion Lannister) huffman coding哈夫曼编码的核心是构造哈夫曼树─即最优二叉树,带权路径长度最 ...

  5. 6.6.1最优二叉树(赫夫曼树)

    首先我们来看一个伪代码.这个是代表成绩的等级. 然后我们知道,每一次高考,学生的成绩分布应该接近某个比例,现在我们假如分别规律如下: 为此可以作出下面的这个树. 我们发现,概率分布主要是在70-79, ...

  6. 哈夫曼树【最优二叉树】【Huffman】

    [转载]只为让价值共享,如有侵权敬请见谅! 一.哈夫曼树的概念和定义 什么是哈夫曼树? 让我们先举一个例子. 判定树: 在很多问题的处理过程中,需要进行大量的条件判断,这些判断结构的设计直接影响着程序 ...

  7. 7.8 最优二叉树与哈夫曼编码

    最优二叉树定义 对于一棵树,可以将每一个结点赋一个数值,称之为结点的权重(weight),简称权.定义一棵树上某个结点ViV_i的带权路径长度(weighted path length)为从根节点到该 ...

  8. 美团2021笔试题(第十场)-公司食堂

    美团2021笔试题(第十场)-公司食堂 题目 小美和小团所在公司的食堂有N张餐桌,从左到右摆成一排,每张餐桌有2张餐椅供至多2人用餐,公司职员排队进入食堂用餐.小美发现职员用餐的一个规律并告诉小团:当 ...

  9. WPL、最优二叉树(哈夫曼树)

    定义:最优树,带权路径长度最短的树 基本概念: 1:路径长度:从树的一个结点到另一个结点的路径中,路径上的分支数目为路径长度 2:树的路径长度:从根结点到每个结点的路径长度之和 3:树的带权路径长度( ...

最新文章

  1. Android stado 运行项目,apk does not exist on disk.
  2. struct timeval结构体
  3. 我肝了一个月,给你写出了这本Java开发手册。
  4. apache camel_Apache Camel入门
  5. java arraylist .get_Java ArrayList get()方法
  6. oracle去重保留一条_关于oracle数据库物理结构(文件)的一些总结
  7. 部署Vista需要了解的十大事项
  8. 向模块化进军,创建类
  9. java实现Execl中的STDEVP函数
  10. 挂机宝是服务器还是虚拟主机,挂机宝属于虚拟主机吗
  11. 机械专业怎么学matlab,MATLAB在机械类专业课教学中的应用
  12. html5 队列展示,设计一个队列研究实例
  13. 计算机组成cpu的是,组成计算机cpu的两大部件
  14. linux7重置密码操作,在CentOS 7/RHEL 7系统上重置root密码的方法
  15. 语言拟人向:来自Python、JAVA、C语言的“傲娇”自我介绍
  16. Oracle 错误总结及问题解决 ORA
  17. 以亲身经历解读经典的定律或法则
  18. 社区卫生服务管理系统
  19. ProM安装以及配置
  20. [bzoj5314][Jsoi2018]潜入行动_树形背包dp

热门文章

  1. 8253的六种工作方式
  2. 操作系统 - Linux - Ubuntu
  3. 凸优化——凸优化问题与算法
  4. sealed java_sealed 关键字
  5. QT Q_DISABLE_COPY 宏的用处
  6. Matplotlib使用小技巧(Python3.5版)
  7. 基于 Python 爬虫+简单数据分析的课程设计(附PPT)
  8. 在现有oracle服务器上新建一个oracle实例
  9. 百度官方:网站优化中死链处理指南与总结
  10. 电脑越用越卡想清又不敢删?搞懂这些文件夹,一键删除省出几个G