力扣:120. 三角形最小路径和
给定一个三角形 triangle ,找出自顶向下的最小路径和。
每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。
方法1:动态规划
定义一个与原来数组有相同位数的二元数组,其中的成员,对应原二维数组的每个成员的最小路径
对于一行中的各个成员的最小路径的计算,而计算主要涉及三个部分,第一部分为左边靠边位置,第二部分为右边靠边的位置,其余为中间位置。
第一部分计算为:本行靠左成员的值 + 到达上一个(上面一行靠左)的最小路径
第二部分计算为:本行靠右成员的值 + 到达上一个(上面一行靠右)的最小路径
第三部分计算为:min(到达上面一个,上面靠左一个)路径最小值 + 本行成员的值
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution{
public:
int mininumtotal(vector<vector<int>>& triangle) {
int n = triangle.size();
vector<vector<int>> f(n, vector<int>(n));
f[0][0] = triangle[0][0];
for (int i = 1; i < n; ++i) {
f[i][0] = f[i - 1][0] + triangle[i][0];
for (int j = 1; j < i; ++j) {
f[i][j] = min(f[i - 1][j - 1], f[i - 1][j]