点击打开链接
// Dp[m][n]表示(0,0)到(m,n)最近步数。Dp[i][j]=min(Dp[i-1][j],Dp[i][j-1])+grid[i][j]
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<cstring>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<limits.h>
#include<assert.h>
#define LL long long
#define inf 0x3f3f3f3f
#define mod 1e9+7
using namespace std;
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
if(grid.size()==0) return 0;
int m=grid.size(), n=grid[0].size();
int i=0,j=0,Dp[m+5][n+5];
memset(Dp, 0, sizeof(Dp));
Dp[0][0]=grid[0][0];
for(i=1;i<m;i++) Dp[i][0]=Dp[i-1][0]+grid[i][0];
for(j=1;j<n;j++) Dp[0][j]=Dp[0][j-1]+grid[0][j];
for(i=1;i<m;i++){
for(j=1;j<n;j++){
Dp[i][j]=min(Dp[i-1][j],Dp[i][j-1])+grid[i][j];
}
}
return Dp[m-1][n-1];
}
};
int main()
{
Solution temple;
vector<int> v1, v2, v3;
v1.push_back(1); v1.push_back(3); v1.push_back(1);
v2.push_back(1); v2.push_back(5); v2.push_back(1);
v3.push_back(4); v3.push_back(2); v3.push_back(1);
vector< vector<int> >res;
res.push_back(v1); res.push_back(v2); res.push_back(v3);
cout<<temple.minPathSum(res)<<endl;
return 0;
}