[青训营 x 码上掘金]3. 寻友之旅

51 阅读2分钟

当青训营遇上码上掘金

寻友之旅

  • 小青要找小码去玩,他们的家在一条直线上,当前小青在地点 N ,小码在地点 K (0≤N , K≤100000),并且小码在自己家原地不动等待小青。小青有两种交通方式可选:步行和公交。
    步行:小青可以在一分钟内从任意节点 X 移动到节点 X-1 或 X+1
    公交:小青可以在一分钟内从任意节点 X 移动到节点 2×X (公交不可以向后走)

请帮助小青通知小码,小青最快到达时间是多久?

1. 情况分析

由于需要时间最短,因此我们最好乘坐公交车,减少步行的时间;

if K < N,小青只能步行;else,小青可以乘坐公交,再用步行弥补剩下距离,可以采用倒推的思想。

2. 动态规划

动态规划常常适用于有重叠子问题和最优子结构性质的问题,而本题中可把整个出行当成一个最优化的选择,其中子结构则包含着N为奇数和偶数,出行方式有两种不同,且在此之间的出行时间应也为最优,此为子结构。

与情况1类似,最简单的情况即只能步行,if K < N, count = N - K, 不能乘坐公交车。

当 N < K,定义Ni为其中一时间的位置,dp[Ni]为走到此位置时的最优用时:

  • 当 Ni为偶数,前一段可以是乘坐公交车,也可以是步行,则 dp[Ni] = min(dp[Ni-1]+1, dp[Ni/2]+1)
  • 当 Ni为奇数,前一段不可能是乘坐公交车,dp[Ni] = dp[i-1] + 1

3. 综合分析

1中的解法则是进行人工分析与判断,我们应该尽可能的多坐公交车,所以简化了Ni为偶数的计算方式