求助,91分
查看原帖
求助,91分
766986
UchihaCelery楼主2022/9/24 20:29

rt,WA on Subtask#0的#2,Subtask#1的#32

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int a[100];
bool vis[100];
bool happen[10000010];
int n;
int sum = 0;
double maxn = -1;
double Helen(double i,double j,double k){
    double p;
    p=(i+j+k)/2;
    return sqrt(p*(p-i)*(p-j)*(p-k));
}

bool Tri(int i,int j,int k){
    if(i+j>k&&i+k>j&&k+j>i)return true;
    else return false;
}
//三边遍历
void dfs(int f,int s,int t)
{
	if(happen[f*1500+s*150+t])
        return;
    happen[f*1500+s*150+t]=1;
   
	if(Tri(f,s,t)&&f>0&&s>0&&t>0)
	{
		 double hh=Helen(f,s,t);
		 if(hh>maxn)
			maxn = hh;
	}
    for(int i=1;i<=n;i++)
    {
        if(vis[i]!=0) continue;
        vis[i]=1;
        dfs(f+a[i],s,sum-(f+a[i]+s));
        dfs(f,s+a[i],sum-(f+s+a[i]));
        vis[i]=0;
        dfs(f,s,sum-(f+s));
    }
}

int main() {
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];	
		sum+=a[i];
	} 
	dfs(0,0,0);
	printf("%d",int(maxn*100));;
	
    return 0;
}
2022/9/24 20:29
加载中...