64. 最小路径和-动态规划算法
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例 1:
输入:grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:7
解释:因为路径 1→3→1→1→1 的总和最小。
示例 2:
输入:grid = [[1,2,3],[4,5,6]]
输出:12
这题算是很不错的一个理题,感兴趣可以学习一下:
int minPathSum(int** grid, int gridSize, int* gridColSize){
int m=gridSize,n=gridColSize[0];
int dp[m][n];
dp[0][0]=grid[0][0];
int max=fmax(m,n);
int col=0;
int rol=0;
for(int i=0;i<m;i++){
if(rol<m){
for(int j=col;j<n;j++){
if(rol==0&&j==0){
dp[rol][j]==grid[rol][j];
}
else if(rol==0){
dp[rol][j]=dp[rol][j-1]+grid[rol][j];
}
else{
dp[rol][j]=fmin(dp[rol][j-1],dp[rol-1][j])+grid[rol][j];
}
}
}
if(col<n){
for(int j=rol;j<m;j++){
if(col==0&&j==0){
dp[j][col]==grid[j][col];
}
else if(col==0){
dp[j][col]=dp[j-1][col]+grid[j][col];
}
else{
dp[j][col]=fmin(dp[j][col-1],dp[j-1][col])+grid[j][col];
}
}
}
col++;
rol++;
}
return dp[m-1][n-1];
}