public static void main(String[] args) { //5 17 Scanner scanner = new Scanner(System.in); while (scanner.hasNext()){ int current = scanner.nextInt(); int target = scanner.nextInt(); int[] dp = new int[target+1]; for (int i = 0; i <= current; i++) { dp[i] = current - i; } for (int i = current+1; i < dp.length; i++) { if(i % 2 == 0){ dp[i] = Math.min(dp[i/2]+1,dp[i-1]+1); }else{ dp[i] =Math.min(dp[(i+1)/2]+2,dp[i-1]+1); } } System.out.println(dp[target]); } }
外卖员每天在大厦中送外卖,大厦共有L层(0<L<=10^5),当他处于第N层楼时,可以每分钟通过步行梯向上达到N+1层,或向下达到N-1层,或者乘坐电梯达到2*N层。给定他所处位置N,以及外卖配送的目的楼层M,计算他送达的最短时间。
分析:加入当前在第五层,dp0 = 5-0, .... dp5 = 5-5. 这就完成了初始化
如果我们前往16层,首先我们在dp8的时间基础上,走一次电梯到16层,也就是dp【8】+1
如果我们到15层,我们就在15+1再除以2也就是dp8的基础上,走一次电梯到16层,到了再步行一次到15层,也就是dp[ (i+1) / 2] + 2
而我们步行的时间是前面一层的时间再步行一次就可以,也就是 dp[ i-1 ] + 1. 所以上面是取他们的较小值。
标签:15,scanner,16,int,外卖,机制,动态,dp From: https://www.cnblogs.com/sgj191024/p/17558432.html