Triangle(动态规划)
Posted Tao-Coder
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
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.
[ [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]; } };
以上是关于Triangle(动态规划)的主要内容,如果未能解决你的问题,请参考以下文章