C-木棍游戏

题目:链接:https://ac.nowcoder.com/acm/contest/11220/C
来源:牛客网

解题思路:爆搜没什么好说的,但今天实现时却写的磕磕绊绊的,说明代码能力下降了许多。
已知三边算三角形面积:海伦公式
\(p=\frac{a+b+c}{2}\) 则有 \(s_{area}=\sqrt{p(p-a)(p-b)(p-c)}\)

#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long ll;
const int N=1e5+10;
int num[N],n;
double ans;
double add(double a,double b,double c)
{
    double p=(a+b+c)/2;
    double sum=sqrt(p*(p-a)*(p-b)*(p-c));
    return sum;
}
bool check(double a,double b,double c)
{
    if(a+b<=c||a+c<=b||b+c<=a)return false;
    return true;
}
void dfs(double a,double b,double c,int idex)
{
    if(check(a,b,c))ans=max(ans,add(a,b,c));
    if(idex>n)return;
    dfs(a+num[idex],b,c,idex+1);
    dfs(a,b+num[idex],c,idex+1);
    dfs(a,b,c+num[idex],idex+1);
    dfs(a,b,c,idex+1);
    return;

}
void solve()
{
   cin>>n;
   for(int i=1;i<=n;i++)cin>>num[i];
   dfs(0,0,0,0);
   if(ans==0)cout<<-1<<endl;
   else printf("%.1f",ans);
   return;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int t=1;//cin>>t;
    while(t--)solve();
    return 0;
}
posted @ 2023-05-29 22:00  五柳呢  阅读(40)  评论(0)    收藏  举报