寻友之旅-动态规划

79 阅读1分钟

当青训营遇上码上掘金

寻友之旅

当青训营遇上码上掘金 主题三 寻友之旅

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

请帮助小青通知小码,小青最快到达时间是多久?
输入: 两个整数 N 和 K
输出: 小青到小码家所需的最短时间(以分钟为单位)

思路

1、首先分析小码在小青后面的时候,这个时候最简单,由于公交车不能通行,所以小青只能往后退,所以这个时候每一个点的最短时间是步行时间。

2、其次分析小码在小青前面的情况,如果直接分析,则要考虑非常多的情况。但是如果我们使用动态规划的思想,如果小码所在的是奇数点,那么小青要走到该点的最短时间只依赖于到前一个点的最短时间。但是如果小青要坐公交车到该点,如果该点的偶数点,那么该点的最短时间则依赖于走到该点的一半的点的时间,如果该点是奇数点,则依赖于到该点的后一个/前一个点的一半的点时间。

代码实现