码迷,mamicode.com
首页 > 编程语言 > 详细

c++的下降路径最短和---->动态规划详解

时间:2019-10-28 01:24:29      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:turn   pat   style   algo   col   sum   规划   stream   res   

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

/***
 * 分析:<----最优化问题----->此题用动态规划去写
 * 1、第一步确定状态---->直接用它自己本身去写A[n][c]
 * 表示从第n层的第c个元素往下的最下的距离
 * 2、第二步确定状态转移方程
 * 状态转移方程可以分为三个部分
 * 1、当c==0的时候
 * A[n][c]+=min(A[n+1][c],A[n+1][c+1]);
 * 2、当c<列宽时
 * A[n][c]+=min3(A[n+1][c-1],A[n+1][c],A[n+1][c+1]);
 * 3、当c==列宽时
 * A[][]+=min(A[n+1][c-1],A[n+1][c]);
 * 三种情况都写出来后就可以找出第一排中的最小的元素并返回即可
 * res=min(res,A[0][i]);------>来个for循环
 * return res;
*/

class Solution {
public:
    int min3(int x,int y,int z)
    {
        return min(min(x,y),z);
    }
public:
    int minFallingPathSum(vector<vector<int>>& A) {
        int m=A.size();
        for(int i=m-2;i>=0;--i)     //从倒数第二排开始
        {
            for(int j=0;j<A[i].size();++j)
            {
                if(j==0)
                    A[i][j]+=min(A[i+1][j],A[i+1][j+1]);
                else if(j==A[i].size()-1)
                    A[i][j]+=min(A[i+1][j-1],A[i+1][j]);
                else if(j<A[i].size()-1)
                    A[i][j]+=min3(A[i+1][j-1],A[i+1][j],A[i+1][j+1]);
            }
        }
        int res=INT_MAX;
        for(int i=0;i<A[0].size();++i)
            res=min(res,A[0][i]);
        return res;
    }
};

 

c++的下降路径最短和---->动态规划详解

标签:turn   pat   style   algo   col   sum   规划   stream   res   

原文地址:https://www.cnblogs.com/z2529827226/p/11749850.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!