大致题意:
有五个山头可以采蘑菇,现在先给出n(n<=5)个山头上采到蘑菇的数量,剩下的5-n个不知道。现在已经知道有两种妖怪,第一种,你需要给他三个山头上采到的蘑菇,而且必须给它三个包的数量和必须整除1024,否则就要把所有山头上采的蘑菇给它
第二种,每次吃掉1024的蘑菇,直到你的蘑菇量小于等于1024.
大致思路:
考阅读的题目~~分情况讨论即可。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
bool flag;
int num[10],n;
int getans(int a)
{
while(a>1024)a-=1024;
return a;
}
int main()
{
int i,j,a,b,c,sum,ans;
while(cin>>n)
{
sum=0;
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
sum+=num[i];
}
sort(num,num+n);
if(n<=3)
{
cout<<1024<<endl;
continue;
}
if(n==4)
{
flag=0;
for(i=0;i<n;i++)
{
if((sum-num[i])%1024==0)
{
cout<<1024<<endl;
flag=1;
break;
}
}
if(!flag)
{
ans=0;
//cout<<getans(num[2]+num[3])<<endl;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
ans=max(ans,getans(num[i]+num[j]));
}
}
cout<<ans<<endl;
}
continue;
}
flag=0;
int tmp;
ans=0;
if(n==5)
{
for(i=0;i<4;i++)
{
for(j=i+1;j<5;j++)
{
tmp=sum-num[i]-num[j];
if(tmp%1024==0)
{
ans=max(ans,getans(num[i]+num[j]));
flag=1;
}
}
}
if(flag==1)
{
cout<<ans<<endl;
}
else{
cout<<0<<endl;
}
}
}
return 0;
}