C语言解礼物的最大值
- 解题思路:一个经典的动态规划问题,求方格路径的最大值,例如求dp[i][j],表示位置i,j的最大值,由于路径只能向右或者向下,也就是i,j位置只能来源于(i-1,j)或者是(i,j-1),求其最大值即可。dp[i][j]=max(dp[i-1][j],dp[i][j-1])+a[i][j]。
- 初始值:初始化第一行以及第一列,路径是确定的。
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param grid int整型二维数组
* @param gridRowLen int grid数组行数
* @param gridColLen int* grid数组列数
* @return int整型
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
int maxnum(int a,int b){
return a>b?a:b;
}
int maxValue(int** grid, int gridRowLen, int* gridColLen ) {
// write code here
//经典动态规划问题 dp[i][j]表示第i行 j列 最大的礼物
//dp[i][j]=max(dp[i-1][j],dp[i][j-1])+arr[i][j]
if(grid==NULL)
return 0;
int dp[200][200];
dp[0][0]=grid[0][0];
for(int i=1;i<gridRowLen;i++)
dp[i][0]=dp[i-1][0]+grid[i][0];
for(int i=1;i<*gridColLen;i++)
dp[0][i]=dp[0][i-1]+grid[0][i];
for(int i=1;i<gridRowLen;i++){
for(int j=1;j<*gridColLen;j++){
dp[i][j]=maxnum(dp[i-1][j],dp[i][j-1])+grid[i][j];
}
}
return dp[gridRowLen-1][*gridColLen-1];
}