#include<iostream>
#include<cmath>
using namespace std;
bool dp[51][1251][1251];
int check(int x,int y,int z) {
if(x+y<=z||x+z<=y||y+z<=x) {
return -1;
}
double p=(double(x+y+z)/2);
p=sqrt(p*(p-x)*(p-y)*(p-z));
return p*100;
}
int main() {
int n,total=0;
cin>>n;
dp[0][0][0]=true;
for(int i=1; i<=n; i++) {
int len;
cin>>len;
total+=len;
for(int j=0; j<=total; j++) {
for(int k=0; k+j<=total; k++) {
dp[i][j][k]=dp[i-1][j][k];
if(j>=len) dp[i][j][k]=dp[i][j][k]|dp[i-1][j-len][k];
if(k>=len) dp[i][j][k]=dp[i][j][k]|dp[i-1][j][k-len];
}
}
}
int ans=-1;
for(int i=1; i<=total/2; i++) {
for(int j=1; j<=total/2; j++) {
if(dp[n][i][j]) ans=max(ans,check(i,j,total-i-j));
}
}
cout<<ans;
return 0;
}
全部回复 共 0 条
还没有人回复。往下写第一条。
发表回复
登录后即可回复本帖,与出题人和同学一起讨论。
登录