首页 > 其他分享 >1130. 叶值的最小代价生成树

1130. 叶值的最小代价生成树

时间:2023-05-31 22:11:48浏览次数:54  
标签:arr int 叶值 复杂度 1130 vector 代价 mx dp

题目链接:1130. 叶值的最小代价生成树

方法:dp

解题思路

  • 状态表示
    • 集合:\(dp[i][j]\) 表示子数组 \([i, j]\) 能构成的所有合法的二叉树集合;
    • 属性:\(dp[i][j]\) 的值表示集合中,二叉树非叶节点值和的其中最小值。
  • 状态计算
    • 集合划分:将子数组 \([i, j]\),划分为 \([i, k]\) 和 \([k + 1, j]\) 对应的两个子集;
    • 计算:
      • \(i = j,dp[i][j] = 0\);
      • \(i\ != j,dp[i][j] = \min\limits_{k = i}^{j - 1}\{dp[i][k] + dp[k + 1][j] + mx[i][k] * mx[k + 1][j]\}\)。

代码

class Solution {
public:
    int mctFromLeafValues(vector<int>& arr) {
        int n = arr.size();
        vector<vector<int>> dp(n, vector<int>(n, INT_MAX / 4)), mx(n, vector<int>(n));
        for (int i = 0; i < n; i ++ ) dp[i][i] = 0;
        for (int i = n - 1; i >= 0; i -- ) {
            mx[i][i] = arr[i];
            for (int j = i + 1; j < n; j ++ ) {
                mx[i][j] = max(arr[j], mx[i][j - 1]);
                for (int k = i; k < j; k ++ ) {
                    dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + mx[i][k] * mx[k + 1][j]);
                }
            }
        }
        return dp[0][n - 1];
    }
};

复杂度分析

时间复杂度:\(O(n^3)\);
空间复杂度:\(O(n^2)\)。

标签:arr,int,叶值,复杂度,1130,vector,代价,mx,dp
From: https://www.cnblogs.com/lxycoding/p/17447468.html

相关文章

  • 扯什么kafka顺序消费,然后呢?古尔丹,代价是什么
    著名面试八股文之kafka为什么读写效率高,写的答案之一是partition顺序写,因而能保证分区内的不连续的有序性。这里的重点是有序追加到磁盘,而不是严格意义上的完全有序性。几年前参加了一大数据岗位面试,95%的时间在扯java基础(这个可以有)和javaweb相关。剩下大约5%的时间换了人聊了......
  • (hdu step 9.1.2)Doing Homework again(贪心——有n份作业,每份作业都有一定的完成时
    题目:DoingHomeworkagainTimeLimit:1000/1000MS(Java/Others)MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):63AcceptedSubmission(s):57 ProblemDescriptionIgnatiushasjustcomebackschoolfromthe30thACM/ICPC.Nowheha......
  • 5471: 数据结构实验--图的最小代价生成树 prim
    描述  求带权无向图的最小代价生成树。    输入  输入数据为多组,每组数据包含多行,第一行为2个整数n,e,n为图的顶点数,e为边数,接下来是e行,每行3个整数,前两个整数是一个顶点对,代表一条边所依附的两个顶点,第3个整数是边的权值。所有值不超过20。  输出......
  • 6343.前往目标的最小代价-343
    前往目标的最小代价给你一个数组start,其中start=[startX,startY]表示你的初始位置位于二维空间上的(startX,startY)。另给你一个数组target,其中target=[targetX,targetY]表示你的目标位置(targetX,targetY)。从位置(x1,y1)到空间中任一其他位置(x2,y2)......
  • 正则表达式引发的惨痛代价
    关注Java后端技术栈“回复“面试”获取最新资料案例在一次小型项目开发中,我遇到过这样一个问题。为了宣传新品,我们开发了一个小程序,按照之前评估的访问量,这次活动预计参与用户量30W+,TPS(每秒事务处理量)最高3000左右。这个结果来自我对接口做的微基准性能测试。我习惯使用ab工具......
  • 1130 -Host 'ip' is not allowed to connect to this MySQL server
      由于mysql默认不允许其他IP地址(非虚拟机)访问可以将访问的用户(如root)的host由localhost(本机)改成%(任意,也可指定ip)最后flushprivileges刷新权限 [root@hadoop4~]#mysql-uroot-pmysql>usemysql;mysql>selecthost,userfromuser;+-----------+------+|host......
  • 202113020023李湘楠实验2实验报告
    //test1.c#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5#defineR1586#defineR2701intmain(){intnumber;inti;sr......
  • m基于随机接入代价的异构网络速率分配算法matlab仿真
    1.算法描述无线接入技术发展迅速,异构网络并存的现象普遍存在;同时,随着终端用户数量的剧增、业务类型的多样化和高服务质量多媒体数据业务需求的增加,通过异构网络进行高速和......
  • cereas学习(0-1) 代价函数CostFunction
    代价函数CostFunction与其他非线性优化工具包一样,ceres的性能很大程度上依赖于导数计算的精度和效率。这部分工作在ceres中称为 CostFunction,ceres提供了许多种 CostFu......
  • 【随机接入】基于随机接入代价的异构网络速率分配算法
    1.软件版本matlab2013b2.本算法理论知识在协作传输中,把业务流分拆到不同网络进行传输可解决单一网络无法传输的问题,同时降低接入阻塞率并提高网络利用率。随机接入......