Triangle min path

本文介绍了一种求解三角形最小路径和问题的高效算法。通过动态规划的方法,从底部向上逐步计算每一步到达顶部的最短路径,最终得出整个三角形的最小路径和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.

class Solution {
public:
    int minimumTotal(vector<vector<int> > &triangle) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if (triangle.size() == 0)
            return 0;
        
        vector<vector<int> > temp;
        temp.resize(2);
        temp[0].resize(triangle.size());
        temp[1].resize(triangle.size());

        for(int i = triangle.size()-1; i >= 0; i--){
            if (i == triangle.size()-1){
                for (int j = 0; j <= i; j++)
                    temp[(i+1)%2][j] = triangle.at(i).at(j);
            }
            else{
                for  (int j = 0; j <= i; j++){
                    temp[(i+1)%2][j] = min( temp[i%2][j],temp[i%2][j+1])+triangle[i][j]; 
                }
            }
        }
        int sum = temp[1].at(0);
     
        return sum;
        
    }
};

1.  开始 temp[i%2] 用的是 temp[(i-1)%2], 出现错误。因为当i=0时,返回的是temp[-1], doesn't make sense!!!


2.还有一题是打印tree,那个可以用递归或者divide and conquer (看12.07.txt)讨论DP的内容



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值