• Triangle(动态规划)


    题目描述

    Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below. For example, given the following triangle
    [
         [2],
        [3,4],
       [6,5,7],
      [4,1,8,3]
    ]
    The minimum path sum from top to bottom is11(i.e., 2 + 3 + 5 + 1 = 11). Note:
    Bonus point if you are able to do this using only O(n) extra space, where n is the total number of rows in the triangle.
     
     
    题意:
      给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。
     

    解题思路:

    • 矩阵型DP问题
    • 自顶而下或者自底而上
    • 采用一个向量dp,复制。三角形最后一行,作为用来更新的一位数组。然后逐个遍历这个dp数组,对于每个数字,和它之后的元素比较选择较小的再加上上面一行相邻位置的元素做为新的元素,然后一层一层的向上扫描,整个过程和冒泡排序的原理差不多,最后最小的元素都冒到前面,第一个元素即为所求。

    代码实现:

    class Solution {
    public:
        int minimumTotal(vector<vector<int> > &triangle) {
            int n=triangle.size();
            vector<int>dp(triangle.back());
            for(int i=n-2;i>=0;i--){
                for(int j=0;j<=i;j++){
                    dp[j]=min(dp[j+1],dp[j])+triangle[i][j];
                }
            }
            return dp[0];
        }
    };
     
  • 相关阅读:
    sdibt 1251 进化树问题
    hdu 2014 位运算
    poj 3254 状态压缩dp
    hdu 5040bfs+优先队列 需要存状态
    zoj 3812 状压dp
    C++标准库:bitset 用法整理&&zoj 3812
    BZOJ 2572 高速公路
    BZOJ 1036 树的统计
    BZOJ 1035 Risk
    BZOJ 1034 泡泡堂
  • 原文地址:https://www.cnblogs.com/ktao/p/7821909.html
Copyright © 2020-2023  润新知