题目链接:点击打开链接
Alice 在五座山上采蘑菇,已知她已经采了 n 座山(0 <= n <= 5) ,且在她回家的路上 ,会被Sunny,Lunar 和 Star三个人抢走三袋蘑菇(三代蘑菇的重量必须整除1024,如果在这五代蘑菇中不存在三袋重量和能整除1024的,则她们将抢走所有蘑菇),并且Alice的邻居会偷走Alice的1024的倍数的蘑菇(若Alice的蘑菇不大于1024,则不偷,否则偷走1024的倍数的重量),问Alice能剩余的最大蘑菇重量为多少?
暑假集训的一道题,题意好理解,结果做了好长时间也没做出来,后来看了别人的代码,结果发现思路一样,代码写的也基本一样,实在不明白哪错,后来改了又改,才对了,气死人。(做这道题的时候我在想Alice过的是啥生活,感觉好悲惨啊!!!!!!!!!!!!!!!!!!!!!)
最后附上代码:
#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
int n;
int a[10];
ios::sync_with_stdio(false);
while(cin>>n){
int sum=0;
for(int i=0;i<n;i++){
cin>>a[i]; sum+=a[i];
}
if(n<=3) cout<<1024<<endl;
else if(n==4){
int maxx=-100;
for(int i=0;i<n;i++){
if((sum-a[i])%1024==0){
maxx=1023;
break;
}
}
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
maxx=max(maxx,(a[i]+a[j]-1)%1024);
}
}
cout<<maxx+1<<endl;
}
else if(n==5){
int mm=-1; int flag=0;
for(int i=0;i<n;i++){
sum-=a[i];
for(int j=i+1;j<n;j++){
sum-=a[j];
if(sum%1024==0){
mm=max(mm,(a[i]+a[j]-1)%1024);
}
sum+=a[j];
}
sum+=a[i];
}
cout<<mm+1<<endl;
}
}
return 0;
}