校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 算法 > 动态规划算法
题目

8*8的棋盘的每个小格里放着一个价值互不相同的礼物,一个人初始位置在左上角,每次只能向下或者向右走一步,并获得相应位置的礼物,结束位置在棋盘的右下角,设计一个算法能够使得到的礼物的总价值最大

解答

思路:

考虑中间状态

     ·设D[i][j]为棋盘位置(i,j)时,可以获得的最大价值; val[i][j]为(i, j)位置礼物的价值 

     ·则有D[i][j] = max(D[i][j-1], D[i-1][j]) +val[i][j]

     ·边界值是D[0][0] = val[0][0], 

     ·因为算法中用到i-1和j-1的值,为书写方便,先处理边界处的值

代码:

int getMaxPrice(int [][]D, int [][]val, int n)
{
int i = 0 ;
int j = 0;

D[0][0] = val[0][0];
//处理边界
for(i = 1; i< n ; i ++)
D[i][0] = D[i-1][0] +val[i][0];
for(j = 1; j< n; j++)
D[0][j] = D[0][j-1] +val[0][j];
for(i = 1; i< n; i++)
{
for( j= 1; j < n; j ++)
D[i][j] = max(D[i][j-1], D[i-1][j]) +val[i][j];
}
return D[n-1][n-1];
}


C 1条回复 评论
几勺奶酪

太棒了,我也是从事开发工作近十年的程序员,现在主要带新手学Java

发表于 2022-05-08 22:00:00
0 0