经典的动态规划题目
因为只能通过向下或者向右走,不需要考虑对角等因素,而且要求的是最小路径和。因此,可以很容易得到状态转移方程
grid[i][j] += grid[i-1][j] < grid[i][j-1] ? grid[i-1][j] : grid[i][j-1]; 在该题中我没有重新申请一个二位数组来存放路径和,而是直接在原数组上面做修改。得到状态转移方程后,只需要做好数组初始化工作就可以很容易得出答案。
int minPathSum(int** grid, int gridSize, int* gridColSize){
for(int i = 1;i < gridSize; i++){
grid[0][i] += grid[0][i-1];
}
for(int i = 1;i < *gridColSize; i++){
grid[i][0] += grid[i-1][0];
}
for(int i = 1;i < gridSize; i++){
for(int j = 1;j < *gridColSize; j++){
grid[i][j] += grid[i-1][j] < grid[i][j-1] ? grid[i-1][j] : grid[i][j-1];
}
}
return grid[gridSize-1][*gridColSize - 1];
}