小Q爬塔

问题描述:小Q正在攀爬一座宝塔,这座宝塔很特别,塔总共有n层,但是两层之间的净高却不相同,所以造成小Q爬过每层的时间也不同。
如果某一次高度为x,那么爬过这一层所需时间也就是x。小Q还会使用一种魔法,每使用一次可以让他向上跳1层或者两层,但是每次调后,
必须至少爬一层才能接着使用魔法。小Q想用最短的时间上顶,希望你能告诉他
n表示高度(n<=10000)
x表示层差(1<=x<=100)
问题分析:
* p[i]表示到达第i层最短时间,并且到达第i层方式是爬
* t[i]表示到达第i层最短时间,并且到达第i层方式是跳
* 情况一:到达第i层的方式是爬
* 那么到达第i-1层的方式可以是跳,也可以是爬,二者选一
* p[i] = Math.min(p[i-1],t[i-1])+x;
* 情况二:到达第i层的方式是跳
* 那么可以从第i-1层起跳,也可以从i-2层起跳,并且到达i-1层和i-2层的方式只能是爬,所以二者选最小的
* t[i] = Math.min(p[i-1],p[i-2]);
代码实现如下:
public class Main {
    public static void main(String[] args) {
        int[] p = new int[10005];
        int[] t = new int[10005];
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for (int i = 1; i <=n ; i++) {
            int x = sc.nextInt();
            p[i] = Math.min(p[i-1],t[i-1]) + x;
            if(i == 1) continue;
            t[i] = Math.min(p[i-1],p[i-2]);
        }
        System.out.println(Math.min(p[n],t[n]));

    }
}

 

转载于:https://www.cnblogs.com/du001011/p/11103298.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值