腾讯编程-小Q爬塔

题目描述:

小Q 正在攀登一座宝塔,这些宝塔很特别。塔总共有 n 层,但是每两层之间的净高却不相同,所以造成了小Q 爬过每层的时间也不同。如果某一层的高度为 x,那么爬过这一层所需的时间也是 x。小Q 还会使用一种魔法,每用一次就可以让他向上跳一层或两层,但是每次跳跃后小 Q 都将用完魔法力,必须爬过至少一层才能再次跳跃(你可以认为小 Q 需要跳两次一层才休息,最后也可以跳到塔外即超过塔高,挑是不消耗时间的)。

小 Q 享用最短的时间爬过塔顶,希望你能告诉他最短时间是多少?

输入描述:

第一行一个数 n(n≤10000)n(n≤10000),表示塔的层数。

接下来的 n 行每行一个数 h(1≤h≤100)h(1≤h≤100),表示从下往上每层的高度

输出描述:

一个数,表示最短时间

样例:

输入:

5

3

5

1

8

4

输出:

1

思路:

p[i]表示到达第i层的最短时间,并且到达第i层的方式是爬

t[i]表示到达第i层的最短时间,并且达到第i层的方式是跳

1、到达第i层的方式是爬:

那么到达第i-1是爬也可以是跳,从两者选最小

    p[i] = min(p[i-1],t[i-1])+a[i]

2、到达第i层的方式是跳:

那么可以从第i-1层跳,或者从第i-2层跳,并且到达第i-1和i-2的方式只能是选爬

    t[i] = min(p[i-1],p[i-2])

最后比较p[n]和t[n]

 

代码:

#include<bits/stdc++.h>
using namespace std;

int p[10005],t[10005];
int main(){

        int n,m,x;
        cin>>n;
        for(int i=1;i<=n;i++){
                cin>>x;
                p[i] = min(p[i-1],t[i-1]) + x;
                if(i==1) continue;
                t[i] = min(p[i-1],p[i-2]);

        }
        cout<<min(p[n],t[n])<<endl;
        return 0;
}

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值