题目说明
1 |
|
解题思路一
动态规划的问题。
好多题解是倒着来算的,对于书写是更简洁了,但是对于思维,太别扭了。。我脑子实在转不过来。
所以我就换成正序规划,这样好理解一点。
此题有点类似于背包算法。但是又不太一样。
- 打点 days[0] 到 days[days.length - 1]的每一天。 所以初始化 dp = new Array(days.length).fill(0),代表的是
一年的第一天到计划旅行的最后一天 - days[0]的值为计划开始旅行的第一天的日期,所以当开始第一天时,当然是2块钱最划算,所以dp[days[0]] = 2
- 第三步就比较核心了!!!!
- 当我们算到第二天的时候,是不是要比较买什么票合适呢?
- 买如果只买一天的票,那就是今天之前所有的money加上今天的2块钱,
dp[i-1] + costs[0] - 如果买7天的票,那就是今天往前划拉7天的money加上今天的7块钱,
dp[i-7] + costs[1] - 同理买30天的票,划拉30天
dp[i-30] + costs[2] - 好嘞,我们又三种选择了,根据题意和常识,我们选择最
便宜的。用Math.min(dp[i-1] + costs[0],dp[i-7] + costs[1],dp[i-30] + costs[2])
代码实现一
1 | /** |