[Leetcode]931.下降路径最小和
这一题目首先需要弄懂题目的意思,下降路径最小和指的是在方阵中可以从上往下行走,走过后获得的值最小,方向可以是走左下,右下,直下。
题目和传统的动态规划一样,把边界的值先初始化,然后通过状态转移一步一步到最后一行
我们有dp[i][j]:意思是终点为(i,j)的下降路径最小值
状态方程为
dp[i][j] = min(dp[i-1][j-1], dp[i-1][j], dp[i-1][j+1])+A[i][j] ;
分别代表从左上(i-1,j-1),从正上方(i-1,j),从右上方(i-1,j+1)三种情况。求这三种情况的最小值即可。
答案很明显就是最后一行的最小值了,我们只需要调用STL自带的min_element或者for循环遍历即可找到。
我提交的代码如下,超越了100%的提交用户
class Solution {
public:
    inline int min3(const int a,const int b,const int c){
        int ans=a;
        if(b<ans)ans=b;
        if(c<ans)ans=c;
        return ans;
    }
    int minFallingPathSum(vector<vector<int>>& A) {
      int t = A.size();
      int dp[t][t];
      for (int j = ; j < t; j++) {
        dp[][j] = A[][j];
        }
        for (int i = ; i < t; i++) {
            dp[i][] = min(dp[i-][], dp[i-][]) + A[i][];
            dp[i][t - ] = min(dp[i-][t - ], dp[i-][t-]) + A[i][t - ];
            int tmp = ;
            for (int j = ; j < t - ; j++) {
                dp[i][j] = min3(dp[i-][j + ], dp[i-][j-], dp[i-][j]) + A[i][j];
            }
        }
        return *min_element(dp[t - ], dp[t-]+t);
    }
};
这段代码还做了几个改进,
- 是求三个数的最小值时使用了自己编写的而不是algorithm库自带的min(a,min(b,c));减少几次函数调用
 - 既然已经知道是方阵,我们不需要再去求参数中的A[0].size()了,直接求一个A.size()即可。
 
[Leetcode]931.下降路径最小和的更多相关文章
- LeetCode 931. 下降路径最小和 详解
		
题目详情 给定一个方形整数数组 A,我们想要得到通过 A 的下降路径的最小和. 下降路径可以从第一行中的任何元素开始,并从每一行中选择一个元素.在下一行选择的元素和当前行所选元素最多相隔一列. 示例: ...
 - Leetcode之动态规划(DP)专题-931. 下降路径最小和(Minimum Falling Path Sum)
		
Leetcode之动态规划(DP)专题-931. 下降路径最小和(Minimum Falling Path Sum) 给定一个方形整数数组 A,我们想要得到通过 A 的下降路径的最小和. 下降路径可以 ...
 - LeetCode 5129. 下降路径最小和 II Minimum Falling Path Sum II
		
地址 https://leetcode-cn.com/contest/biweekly-contest-15/problems/minimum-falling-path-sum-ii/ 题目描述给你一 ...
 - [Leetcode]120.三角形路径最小和
		
---恢复内容开始--- 题目的链接 简单的动态规划题,使用了二维dp数组就能很好的表示. 由于有边界的问题,所以这个dp数组为 dp[n+1][n+1]. dp[i][j]意思是终点为(i-1,j- ...
 - [LeetCode] 931. Minimum Falling Path Sum 下降路径最小和
		
Given a square array of integers A, we want the minimum sum of a falling path through A. A falling p ...
 - [Leetcode][动态规划] 第931题 下降路径最小和
		
一.题目描述 给定一个方形整数数组 A,我们想要得到通过 A 的下降路径的最小和. 下降路径可以从第一行中的任何元素开始,并从每一行中选择一个元素.在下一行选择的元素和当前行所选元素最多相隔一列. 示 ...
 - [Swift]LeetCode931. 下降路径最小和 | Minimum Falling Path Sum
		
Given a square array of integers A, we want the minimum sum of a falling path through A. A falling p ...
 - Leetcode931. Minimum Falling Path Sum下降路径最小和
		
给定一个方形整数数组 A,我们想要得到通过 A 的下降路径的最小和. 下降路径可以从第一行中的任何元素开始,并从每一行中选择一个元素.在下一行选择的元素和当前行所选元素最多相隔一列. 示例: 输入:[ ...
 - Leetcode 931. Minimum falling path sum 最小下降路径和(动态规划)
		
Leetcode 931. Minimum falling path sum 最小下降路径和(动态规划) 题目描述 已知一个正方形二维数组A,我们想找到一条最小下降路径的和 所谓下降路径是指,从一行到 ...
 
随机推荐
- java启动jar包中的指定类
			
运行jar文件的方法是:java -jar xxx.jar 希望运行里面的具体某个类,这时可以通过:java -cp xxx.jar xxx.com.xxxx 其中-cp命令是将xxx.jar加入到c ...
 - R语言的文件写入
			
R语言的文件写入 官方文档介绍如下: write.table(x, file = "", append = FALSE, quote = TRUE, sep = " &q ...
 - spring boot和mybatis入门
			
[size=x-large]昨天讲了一下spring boot的入门操作相信老手已经明白入门的操作,今天我来讲下我自己的心得,可能与官方有一定差异:希望对大家能有用 一:开门见山首先看工程结构 这里的 ...
 - Mybatis类型转换介绍
			
1.1 目录 1.2 建立TypeHandler 1.2.1 TypeHandler接口 1.2.2 BaseTypeHandler抽象类 1.3 注册TypeHa ...
 - Hdu4135 Co-prime                                                                                            2017-06-27 16:03             25人阅读              评论(0)              收藏
			
Co-prime Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Subm ...
 - Surface 2装机必备软件指南
			
新买的Surface到货了还不知道有什么用,每天就用来划划点点?有点太浪费了吧!跟哥走,哥给你推荐几款Surface 2装机必备的软件~应用商店,走起~ 初次使用看过来:Win8宝典 如果你是一个像我 ...
 - Java读取修改Properties文件
			
properties文件是我们经常需要操作一种文件,它使用一种键值对的形式来保存属性集. 无论在学习上还是工作上经常需要读取,修改,删除properties文件里面的属性. 本文通过操作一个prope ...
 - request.getScheme() 使用方法
			
今天在看代码时,发现程序使用了 request.getScheme() .不明白是什么意思,查了一下.结果整理如下: 1.request.getScheme() 返回当前链接使用的协议:一般应用返回h ...
 - Spring中注入bean学习的总结
			
1.在类上直接加注解@Component,那么这个类就直接注入到Spring容器中了 ,像@Contrloller,@Service这些本质上都是@Component, 2.@Configurati ...
 - 程序员、技术领导、管理者各有烦恼,你占了几条?ZZ
			
Q1: 作为学生,你学习 SE的烦恼有哪些? http://blog.jobbole.com/101840/