华为机试真题实战应用【赛题代码篇】-机智的外卖员(附Java代码实现)

问题描述

外卖员每天在大厦中送外卖,大厦共有L层(0

输入描述

当前所处楼层N和外卖配送的目的楼层M

输出描述

送达的最短时间

示例


输入

5 17

输出

4

知识储备

 动态规划    

难度:中等

解题思路

这道题是一道动态规划问题,dp[i]表示到达第i层的最短时间。

初始化的时候,到N层以下需要的时间,都减去相应的楼层,即步行向下
转移方程为,走步行梯都是dp[i - 1] + 1,走电梯需要判断是偶数层,如果是偶数层,则dp[i / 2] + 1,如果是奇数层,则dp[(i + 1) / 2] + 2,选择走步行梯和电梯时间最短的。


直觉是动态规划, 子问题拆解碰到问题:
从第N层到第i层, 方式只可能有三条:
1)先到第i-1层, 再上一层, 即d[i-1]+1
2)先到i+1层, 再下一层, 即d[i+1]+1 
3)如果i是偶数, 还可能是从i/2层坐电梯上来, 即d[i/2]+1
但这样d[i]依赖d[i+1]无法使用动态规划(d为最短路径函数)

下面证明方式2中到i+1层的方式一定是坐电梯直接

你可能感兴趣的:(java,开发语言)