海伦公式:

:alt

alt

当时其实是有想到海伦公式的,但没注意到n的最大值,感觉怎样都会超时,以及dfs不熟练,只拿来解过迷宫,导致完全没有思路。。。

#include<bits/stdc++.h>
using namespace std;

int n;
double a[10];
double maxx =-1;

//海伦公式
double helen(double a,double b,double c){
    double p = (a+b+c)/2;
    double s = sqrt(p*(p-a)*(p-b)*(p-c));
    return s;
}

//x,y,z为用于木棍分组,cnt从0到n代表每一根木棍
void dfs(int x,int y,int z,int cnt){
	double res;
    if(cnt>n)return;
    if(x+y>z&&x+z>y&&y+z>x){
    	res=helen(x,y,z);
        if(res>maxx)maxx=res;
    }
    
    //把每根木棍依次放入每组或者都不放入,枚举所有情况
    dfs(x+a[cnt],y,z,cnt+1);
    dfs(x,y+a[cnt],z,cnt+1);
    dfs(x,y,z+a[cnt],cnt+1);
    dfs(x,y,z,cnt+1);
}

int main(){
    cin>>n;
    for(int i = 0;i<n;i++)cin>>a[i];
	dfs(0,0,0,0);
    printf("%.1f",maxx);
    return 0;
}

以上