动态规划经典题之年终奖
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划经典题之年终奖相关的知识,希望对你有一定的参考价值。
题目
解题思路
这道题属于贪心算法,但本质仍然是动态规划。对于这样一个棋盘,到达(i,j)
这一点要么是上一行(i-1,j)
向下移动一行得到,要么是前一列(i,j-1)
向右移动一列得到
因此我们可以建立一个相同的矩阵gifts
,gifts[i][j]
表示从起点到i,j
这一点中某条路径代表的礼物价值值总和,最终返回数值即可
这个计算过程中有三个特殊情况
- 情况1:如果是起点,那么直接忽略即可
- 情况2:如果处在第一行,那么由于是第一行,所以从起点走,它只可能是向右不断走得到的
- 情况3:如果处在第一列,那么由于是第一列,所以从起点走,它只可能是向下不断走的到的
其余情况均是即可向右走,也可以向下走
代码
class Bonus {
public:
int getMost(vector<vector<int> > board)
{
// write code here
int length=board.size();
int width=board[0].size();
vector<vector<int>> gifts(length,vector<int>(width,0));
gifts[0][0]=board[0][0];
for(int i=0;i<length;i++)
{
for(int j=0;j<width;j++)
{
if(i==0 && j==0)//情况1
continue;
else if(i==0)//情况2
gifts[i][j]=gifts[i][j-1]+board[i][j];
else if(j==0)//情况3
gifts[i][j]=gifts[i-1][j]+board[i][j];
else//正常情况
gifts[i][j]=max(gifts[i-1][j],gifts[i][j-1])+board[i][j];
}
}
return gifts[length-1][width-1];//返回到右下角的礼物价值值总和
}
};
以上是关于动态规划经典题之年终奖的主要内容,如果未能解决你的问题,请参考以下文章