巨简单和前面的一样。
前面是递归,后面是动态规划,没做对数器,但是应该没问题
#include <iostream>
#include <vector>
#include <algorithm>
#include <limits.h>
using namespace std;
int minergodic(vector<vector<int>>& grid,int x,int y)
{
int ret=0;
int num1=0; ///<左边的数
int num2=0; ///<上边的数
if(0==x && 0==y)
{
ret = grid[x][y];
goto OUT;
}
if(0==x)///<第0行
{
num1 = minergodic(grid,x,y-1);
num2 = INT_MAX;
}
else if(0==y)
{
num1 = INT_MAX;
num2 = minergodic(grid,x-1,y);
}
else
{
num1 = minergodic(grid,x,y-1);
num2 = minergodic(grid,x-1,y);
}
ret = grid[x][y]+min(num1,num2);
OUT:
return ret;
}
int minPathSum(vector<vector<int>>& grid) {
int m=grid.size(); ///<m行n列
int ret = 0;
int n=0;
if(grid.empty())
{
ret = 0;
goto OUT;
}
n=grid[0].size();
ret = minergodic(grid,m-1,n-1);
OUT:
return ret;
}
int bpp(vector<vector<int>>& grid)
{
vector<vector<int>> bp(grid.begin(),grid.end());
if(bp.empty())
{
return 0;
}
for(int x=0;x<(int)bp.size();++x)
{
for(int y=0;y<(int)bp[0].size();++y)
{
if(0==x && 0==y)
{
continue;
}
if(0==x)///<第0行
{
bp[x][y] += bp[x][y-1];
}
else if(0==y)
{
bp[x][y] += bp[x-1][y];
}
else
{
bp[x][y] += (min(bp[x][y-1] , bp[x-1][y]));
}
}
}
return bp[bp.size()-1][bp[0].size()-1];
}
int main(void)
{
int a1[]={1,3,1};
int a2[]={1,5,1};
int a3[]={4,2,1};
vector<int>b1(begin(a1),end(a1));
vector<int>b2(begin(a2),end(a2));
vector<int>b3(begin(a3),end(a3));
vector<vector<int>>c;
c.push_back(b1);
c.push_back(b2);
c.push_back(b3);
cout<<bpp(c)<<endl;
return 1;
}
如果我的文章帮到了你请点一下赞,我想知道我帮助了多少人