Select Code
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int main()
{int a[13];
int t;
cin>>t;
int m=0;
while(t--)
{
memset(a,100009,sizeof(a));
int time;
int num=0;
cin>>time;
for(int i=0; i<time; i++)//先找出最duo的那个,只看个人的那个,另外一个礼物没限制,然后在插空
{
cin>>a[i];
num+=a[i];
}
m++;
cout<<"Case #"<<m<<": ";
int num1=num/2;、、最多就能放这么多
sort(a,a+time);
int sum=0;
for(int i=0; i<time-1; i++)
sum+=a[i];
if(sum>=a[time-1])
cout<<num1<<endl;
else
{
sum=2*sum+1;//最多插那么多(互不相同的个数)最前面和最后面各有一个
if(sum>=num1)
cout<<num1<<endl;
else
cout<<sum<<endl;
}
}
return 0;
}
就是将最多的往其他里面插入如果最多的不如其他的总和还多,就可以出现num/2;如果不行则看看最多的那个剩下多少