有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;
}