您的位置:首页 > 其它

[leetcode] 64.Minimum Path Sum

2015-05-11 23:42 267 查看
题目:

Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.

Note: You can only move either down or right at any point in time.

题意:

有一个m*n的格子里面装满了非负数字,找一条路径从左上角到达右下角,这条路径上数字之和最小。

思路:

依旧使用动态规划思想,最左边的一列每个格子只能从上面的格子往下移一格到达,最上面的一列每个格子只能从左边往右移一格到达。而其它的格子可以从上面往下移一格或者从左边往右边移一格到达。对于有两条道路选择的格子,选一个较小值作为DP[i][j]的结果值.

DP[i][j] = A[i][j] + DP[i][j-1](if i ==0)

DP[i][j] = A[i][j] + DP[i-1][j](if j == 0)

DP[i][j] = min{DP[i-1][j],DP[i][j-1]} + A[i][j];

以上。

代码如下:

class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m = grid.size();
if(m == 0)return 0;
int n = grid[0].size();
int **DP = new int*[m];
for(int i = 0; i < m; i++)
DP[i] = new int
;
DP[0][0] = grid[0][0];
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++){
if(i == 0 && j == 0)continue;
DP[i][j] = min((i == 0?0x7fffffff:DP[i-1][j]),(j == 0?0x7fffffff:DP[i][j-1])) + grid[i][j];
}
return DP[m-1][n-1];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: