zoukankan      html  css  js  c++  java
  • 每日编程-20170406

    小东所在公司要发年终奖,而小东恰好获得了最高福利,他要在公司年会上参与一个抽奖游戏,游戏在一个6*6的棋盘上进行,上面放着36个价值不等的礼物,每个小的棋盘上面放置着一个礼物,他需要从左上角开始游戏,每次只能向下或者向右移动一步,到达右下角停止,一路上的格子里的礼物小东都能拿到,请设计一个算法使小东拿到价值最高的礼物。

    给定一个6*6的矩阵board,其中每个元素为对应格子的礼物价值,左上角为[0,0],请返回能获得的最大价值,保证每个礼物价值大于100小于1000。

    解答:

    典型动态规划

    定义dp[6][6],dp[i][j]表示ij的格子走到55的格子最多能拿到多少分

    为了方便计算我扩了个边

    dp[i][j] = max(board[i+1][j],board[i][j+1])

    遍历就好

    为了减少空间我直接用board存储dp了

    Max就不贴了

     1 int getMost(vector<vector<int>> board) {
     2     // write code here
     3     for (auto i = 0; i < 6; i++)
     4     {
     5         board[i].push_back(0);
     6     }
     7     board.push_back(vector<int>(7, 0));
     8     for (auto i = 5; i >= 0; i--)
     9     {
    10         for (auto j = 5; j >= 0; j--)
    11         {
    12             board[i][j] += Max([i + 1][j] , board[i][j + 1]);
    13         }
    14     }
    15     return board[0][0];
    16 }
  • 相关阅读:
    Tomcat5配置mysql
    Eclipse完全手册
    MBR是什么
    必杀技公布——用特征码定位关键代码,秒杀MFC程序
    Google C++编程命名约定
    认识硬盘主引导扇区
    c++ const 用法详解
    主引导区
    C++ 关于struce结构体字节对齐
    Fedora 显示设备配置工具介绍
  • 原文地址:https://www.cnblogs.com/linhaowei0389/p/6675005.html
Copyright © 2011-2022 走看看