动态规划最短路径LintcodeNO110
动态规划最短路径LintcodeNO110
简单的dp题,没啥好说的...
class Solution {
public:
/**
* @param grid: a list of lists of integers
* @return: An integer, minimizes the sum of all numbers along its path
*/
int minPathSum(vector<vector<int>> &grid) {
// write your code here
const int DP_N = 1000;
const int DP_M = 1000;
int n = grid.size();
int m = grid[0].size();
int i,j;
int dp[DP_N][DP_M];
memset(dp,0,DP_N * DP_M);
//初始化dp数组的值
dp[0][0] = grid[0][0];
for(int t=1;t<n;t++)
{
dp[t][0] = dp[t-1][0] + grid[t][0];
}
for(int k=1;k<m;k++)
{
dp[0][k] = dp[0][k-1] + grid[0][k];
}
//开始dp
for(i=1;i<n;i++)
{
for(j=1;j<m;j++)
{
dp[i][j] = grid[i][j] + min(dp[i-1][j],dp[i][j-1]);
}
}
return dp[i-1][j-1];
}
};
在本地调试代码的时候遇到 int dp[DP_N][DP_M];
行列都大于1000时分配失败的问题.
解决,本地调试调小一点,Submit时再调回来就好了
注意一下边界问题,还有记得初始化dp数组.