题目
![](https://img-blog.csdnimg.cn/img_convert/fdbadf84786b134391cbe21641af339b.png)
题解
int maxValue(int** grid, int gridSize, int* gridColSize){
//dp数组初始化
int** dp = (int**)malloc(sizeof(int*)*gridSize);
for(int i = 0;i < gridSize;i++){
dp[i] = (int*)malloc(sizeof(int)*(*gridColSize));
}
//dp数组赋值过程,即求解过程
dp[0][0] = grid[0][0];
for(int i = 0;i < gridSize;i++){ //遍历行
for(int j = 0;j < *gridColSize;j++){ //遍历列
int max = grid[i][j];
if(i > 0){ //有上行
max = dp[i-1][j] + grid[i][j];
}
if(j > 0){ //有左列
max = max>dp[i][j-1]+grid[i][j]? max:dp[i][j-1]+grid[i][j];
}
dp[i][j] = max;
}
}
return dp[gridSize-1][*gridColSize-1];
}
![](https://img-blog.csdnimg.cn/img_convert/8dd544fe7501853a9b76bf5b199d0745.png)
要点
动态规划中的简单问题,dp[i][j]来自dp[i-1][j]+grid[i][j]、dp[i][j-1]+grid[i][j]中较大的一个。
C语言中的矩阵初始化。(即二维数组)
int ** dp = (int**)malloc(sizeof(int*)*行数);
for(int i = 0;i < 行数;i++){
dp[i] = (int*)malloc(sizeof(int)*列数);
}
至于数组是否要赋初值,我觉得没必要,因为后面都要更新掉。