题意:从给定的集合中找到最大的d,其中d满足d=a+b+c,a,b,c都是集合的元素。
思路:数据规模较小,直接暴力O(n^4).
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int flag,tmp,n;
int num[1003];
int cmp_int(const void *_a,const void *_b)
{
int *a=(int *)_a;
int *b=(int *)_b;
return *b-*a;
}
int Calculate()
{
int i,j,k,r;
int a,b,c,d;
for(i=0;i<n;i++)
{
d=num[i];
for(j=0;j<n;j++)
{
if(i==j)continue;
a=num[j];
for(k=0;k<n;k++)
{
if(i==k||j==k)continue;
b=num[k];
for(r=0;r<n;r++)
{
if(r==i||r==j||r==k)continue;
c=num[r];
if(a+b+c==d)
{
tmp=d;
return 1;
}
}
}
}
}
return 0;
}
int main()
{
int i;
while(scanf("%d",&n)&&n)
{
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
qsort(num,n,sizeof(num[0]),cmp_int);
flag=Calculate();
if(flag)printf("%d\n",tmp);
else printf("no solution\n");
}
return 0;
}