跑步最高分算法(动态规划)-“奋斗杯”编程大赛题目
0、题目
1、思考
1.1 数组定义
1.2 初始化
1.3 状态转移
1.4 空间复杂度优化
2 代码实现
2.1 go语言实现
2.2 go语言空间复杂度优化实现
2.3 java实现
2.4 java空间复杂度优化实现
周末去参加了个“奋斗杯”上海市青年计算机程序设计大赛,水了个二等奖。这是其中一道题,因为时间不够没做出来,思路都对,差了一点就完成了。动态规划一直是我的弱项,趁此机会,把它记录下来。
0、题目
A同学参加一个跑步比赛,路径分为n段,每段有不同的分值。如果该段走路不得分;该段慢跑则得相应的分数;该段快跑则得对应分数的两倍,但下一段必须走路。求A同学跑完全程可以获得的最高分。
如总共有4段路, 对应的分值为 [1, 2, 3, 4] ,则最高分的跑法是,前三段慢跑,最后一段快跑,即 1+2+3+4*2 = 14 。
输入对应路段分值的数组,输出获得的最高分。
Golang
Java
1、思考
状态转移,经典的动态规划算法。
1.1 数组定义
定义二维数组 dp[i][j] ,
值为当前状态下可以获得的最高分;
i 为路段的索引;
j 为本段跑步状态,当 j=0 为走路,j=1 为慢跑,j=2 为快跑。
<