题解:随机化………………
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
using namespace std;
int n,a[41],ans=-1;
void wash()//随机洗木板顺序
{
for(int i=1;i<=n;i++)
{
int t=rand()%n;
swap(a[t],a[i]);
}
}
int hl(double aa,double bb,double cc)//海伦公式求面积
{
if(aa+bb>cc&&bb+cc>aa&&aa+cc>bb)
{
double p=(aa+bb+cc)/2;
return trunc(sqrt(p*(p-aa)*(p-bb)*(p-cc))*100);
}
else return -1;
}
void work()//贪心程序
{
int p[3],pos;
p[0]=a[1];p[1]=a[2];p[2]=a[3];
for(int i=4;i<=n;i++)
{
int min=0x7fffffff;
for(int j=0;j<=2;j++)
{
if(min>p[j])
{
min=p[j];
pos=j;
}
}
p[pos]+=a[i];
}
ans=max(ans,hl(p[0],p[1],p[2]));
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=100000;i++)
{
wash();
work();
}
printf("%d\n",ans);
return 0;
}