版权声明:转载请注明出处即可 https://blog.csdn.net/qq_35170212/article/details/81252551
[编程题] 年终奖
时间限制:3秒
空间限制:32768K
小东所在公司要发年终奖,而小东恰好获得了最高福利,他要在公司年会上参与一个抽奖游戏,游戏在一个6*6的棋盘上进行,上面放着36个价值不等的礼物,每个小的棋盘上面放置着一个礼物,他需要从左上角开始游戏,每次只能向下或者向右移动一步,到达右下角停止,一路上的格子里的礼物小东都能拿到,请设计一个算法使小东拿到价值最高的礼物。
给定一个6*6的矩阵board,其中每个元素为对应格子的礼物价值,左上角为[0,0],请返回能获得的最大价值,保证每个礼物价值大于100小于1000。
手撕:
#include<vector>
#include<iostream>
using namespace std;
int getMost(vector<vector<int> > board) {
int low=board.size();
int col=board[0].size();
vector<vector<int>>dp=board;
for(int i=1;i<low;++i){
dp[i][0]+=dp[i-1][0];
}
for(int j=1;j<col;++j){
dp[0][j]+=dp[0][j-1];
}
for(int i=1;i<low;++i){
for(int j=1;j<col;++j){
dp[i][j]=max(dp[i-1][j],dp[i][j-1])+board[i][j];
}
}
return dp[low-1][col-1];
}
测试:
int main(){
/*
426 306 641 372
477 409 223 172
327 586 363 553
292 645 248 316
711 295 127 192
495 208 547 175
131 448 178 264
207 676 655 407
309 358 246 714
*/
int row=0;
int col=0;
while(cin>>row>>col){
vector<vector<int>>vr(row,vector<int>(col));
for(int i=0;i<row;++i){
for(int j=0;j<col;++j){
cin>>vr[i][j];
}
}
cout<<getMost(vr)<<endl;
}
return 0;
}