codeforces-#463B. Caisa and Pylons

      题目大意:题目给出n个塔以及各个塔的高度,现在从第一个塔开始跳,跳完所有塔。如果前面塔高出现在所在的塔,就看自己的能量值能否跳上去,如果不能则用dollar支付其需要的费用。如果前面的低于现在的,则能量值增加两者之间的差值。问游戏结束需要最少花费多少dollar?

      解题思路:对于第一个点的处理,直接将花费初始为第一个点。然后就依次判断,分两种情况:一是前面塔低于后面塔,则能量值增加两者的差值,dollar值不变;二是前面塔高于后面的,先看能量值,如果等于0,则dollar值增加两者之间的差值,如果能量值小于塔之间的差值,则dollar值增加差值减去能量值,并将能量值置为0.如果能量值大于差值,则dollar值不变,能量值减去差值即可。直接就这样模拟就可以了,详见code。

     题目来源:http://codeforces.com/problemset/problem/463/B

    code:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

const int MAXN = 100000+10;
int n,sum,tmp;
int h[MAXN];

int main(){
    while(scanf("%d",&n)!=EOF){
        memset(h,0,sizeof(h));
        for(int i=0;i<n;i++)
            scanf("%d",&h[i]);
        sum=h[0];tmp=0;
        for(int i=0;i<n-1;i++){
            if(h[i]<h[i+1]){
                if(tmp==0) sum+=h[i+1]-h[i];
                else if(tmp<h[i+1]-h[i]){sum+=h[i+1]-h[i]-tmp;tmp=0;}
                else{tmp-=h[i+1]-h[i];}
            }
            else tmp+=h[i]-h[i+1];
        }
        printf("%d\n",sum);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值