• 三角形最小路径和


    题目链接:https://leetcode-cn.com/problems/triangle
    题目描述:
    给定一个三角形 triangle ,找出自顶向下的最小路径和。
    每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。

    示例 1:
    输入:triangle = [[2],[3,4],[6,5,7],[4,1,8,3]]
    输出:11
    解释:如下面简图所示:
    2
    3 4
    6 5 7
    4 1 8 3
    自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。

    示例 2:
    输入:triangle = [[-10]]
    输出:-10

    提示:
    1 <= triangle.length <= 200
    triangle[0].length == 1
    triangle[i].length == triangle[i - 1].length + 1
    -104 <= triangle[i][j] <= 104

    题解:

    class Solution {
    public:
        int minimumTotal(vector<vector<int>>& triangle) {
            if(triangle.size() == 0)
                return 0;
            if(triangle.size() == 1)
                return triangle[0][0];
            //dp[i][j]:从顶层到第i层第j个元素的最小路径和
            vector<vector<int>> dp(triangle.size(), vector<int>(triangle.size()));
            dp[0][0] = triangle[0][0];
            for(int i = 1; i < triangle.size(); i++)
            {
                dp[i][0] = dp[i - 1][0] + triangle[i][0];                //dp每行的第一个元素
                for(int j = 1; j < i; j++)
                    dp[i][j] = min(dp[i - 1][j - 1], dp[i - 1][j]) + triangle[i][j];
                dp[i][i] = dp[i - 1][i - 1] + triangle[i][i];   //dp每行最后一个元素
                
            }
            int result = INT_MAX;
            for(int col = 0; col < triangle.size(); col++)
            {
                result = min(result, dp[triangle.size() - 1][col]);
            }
            return result;
        }
    };
    
    
  • 相关阅读:
    Linux初级入门(一)
    教育行业----精华网址汇总
    乐高教育版45544零件---分类识别
    乐高ev3编程---书籍选择
    机器人 乐高ev3 arduino 控制器等
    scratch----回家过年
    Scratch2.0例—接苹果
    scratch2绘图编辑器使用--总结
    在舞台上跳舞
    教学设计--我是飞行员
  • 原文地址:https://www.cnblogs.com/ZigHello/p/15484435.html
Copyright © 2020-2023  润新知