年终奖-----------二维矩阵路径累积权值动态规划

版权声明:转载请注明出处即可 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;
}

题目来源:
https://www.nowcoder.com/test/734817/summary

猜你喜欢

转载自blog.csdn.net/qq_35170212/article/details/81252551