题目描述
牛牛准备在一个3行n列的跑道上跑步。一开始牛牛可以自己选择位于(1,1)还是(2,1)还是(3,1)。
跑道的每一格都有一些金币,当牛牛跑到一个格子,他会获得这个格子的所有金币。
当牛牛位于第i行第j列时,他可以的下一步最多可能有三种选择:
- 不花费金币跑到第i行第j+1列
- 花费mj的金币跑到第i-1行第j+1列(如果i=1则不可以这么跑)。
- 花费mj的金币跑到第i+1行第j+1列(如果i=3则不可以这么跑)。
(牛牛是一个富豪,本身带了很多的金币,所以你不用担心他钱不够用)
现在告诉你所有格子的金币数量和每一列的金币花费,牛牛想知道他跑到第n列最多可以赚得多少金币(赚得金币=获得金币-消耗金币)
输入
复制
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金币。
int solve(int n, vector& a1, vector& a2, vector& a3, vector& m) {
// 由题目知可以任意从(1,1)(2,1)(3,1)开始
//则可以知道假设第二次跳到(1,2)时只可能从(1,1)或者(2,1)跳
//则有跑到(1,2)的总金币为max((1,1),(2,1)-m1)
//由此类推其他也是如此
for(int i=1;
i