首页 > 试题广场 >

变向

[编程题]变向
  • 热度指数:1783 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
牛牛准备在一个3行n列的跑道上跑步。一开始牛牛可以自己选择位于(1,1)还是(2,1)还是(3,1)。

跑道的每一格都有一些金币,当牛牛跑到一个格子,他会获得这个格子的所有金币。

当牛牛位于第i行第j列时,他可以的下一步最多可能有三种选择:

1. 不花费金币跑到第i行第j+1列
2. 花费m_j的金币跑到第i-1行第j+1列(如果i=1则不可以这么跑)。
3. 花费m_j的金币跑到第i+1行第j+1列(如果i=3则不可以这么跑)。
(牛牛是一个富豪,本身带了很多的金币,所以你不用担心他钱不够用)
现在告诉你所有格子的金币数量和每一列的金币花费,牛牛想知道他跑到第n列最多可以赚得多少金币(赚得金币=获得金币-消耗金币)

示例1

输入

3,[1,9,3],[6,4,6],[1,1,5],[3,2,1]

输出

16

说明

一开始牛牛选择位于第2行第1列,拿到6个金币。然后牛牛花3金币到第1行的2列拿到9个金币,最后牛牛花费2金币到第2行第3列。总共获得21金币,消耗5金币。赚得16金币。

备注:
第1个参数n代表跑道的列数
第2,3,4个参数vector<int> a1,a2,a3各有n个元素,代表第1,2,3行每一列的金币个数
第5个参数vector<int> m有n个元素代表每一列进行换行的时候需要的金币花费

这道题你会答吗?花几分钟告诉大家答案吧!