51nod 西湖游船

有n名游客在西湖游玩,现在他们要上船观光。游客编号1到n。船的最大承重为W。第i个人的重量为c[i]。现在有若干次游客上下船的操作,请统计一下整个过程中船所承受过的最大总重量是多少。

 收起

输入

单组测试数据。
第一行输入三个整数n(1<=n<=20), m(1<=m<= 500 ) 和 W(1<=W<= 10000)。
接下来n行输入n名游客的重量c[i](1<=c[i]<=1000)。
接下来m行,每行一个1到n之间的整数,表示游客的编号。表示该游客的上/下船,如果该游客已经在船上,那么该游客就下船,反之就上船。刚开始的时候所有游客都不在船上。

输出

输出一个整数表示整个上下船过程中,船所受到的最大重量。如果最大重量超过了船的最大承重能力,输出Oh, My God!

输入样例

样例输入1
2 2 10
5
7
1
2
样例输入2
3 6 10
2
5
7
2
1
2
3
1
3

输出样例

样例输出1
Oh, My God!
样例输出2
9

没啥技巧,出现次数是偶次就减质量,奇数次就加质量,记录下最大时的质量并比较,如果超出最大承重量就输出。代码:

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int a,b,c,d,e,f,g[10000],h[10000],maxx=-1,m=0;
    cin>>a>>b>>c;
    for(d=1;d<=a;++d)
        cin>>g[d];
    for(d=1;d<=b;++d)
    {
        cin>>h[d];
        f=0;
        for(e=d-1;e>=1;--e)
            if(h[d]==h[e]) f++;
       if(f%2!=0) m-=g[h[d]];
        else m+=g[h[d]];

        if(m>maxx) maxx=m;
        if(maxx>c) {maxx=-1;cout<<"Oh, My God!";break;}
    }
if(maxx!=-1) cout<<maxx;
    return 0;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值