机制的外卖员问题动态规划

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. 所以上面是取他们的较小值。

posted @ 2023-07-16 19:55  sgj191024  阅读(40)  评论(0编辑  收藏  举报