C-木棍游戏 DFS暴力

题目链接:C-木棍游戏_牛客小白月赛43 (nowcoder.com)

#include
#include
#include
#include
#include
#include
#include
#include
#pragma warning(disable:4996) 
using namespace std;
typedef long long ll;
//总结 本题DFS暴力每一种情况
//A表示A边的和
//B表示B边的和
//C表示C边的和
//最后通过面积公式,求面积最大即可
double gets(int a, int b, int c)
{
    double s = (a + b + c) / 2;
    return sqrt(s * (s - a) * (s - b) * (s - c));
}
double ans = -1;
int n = 0;
double A = 0;
double B = 0;
double C = 0;
int a[100];
void dfs(int now)
{
    if (now == n + 1)
    {
        if (A + B > C && B + C > A && A + C > B)
        {
            double s = gets(A, B, C);
            ans = max(ans, s);
        }
        return;
       
    }
    dfs(now + 1);
    A += a[now];
    dfs(now + 1);
    A -= a[now];
    B += a[now];
    dfs(now + 1);
    B -= a[now];
    C += a[now];
    dfs(now + 1);
    C -= a[now];
}
int main()
{
    
    cin >> n;
    int i = 0;
    for (i = 1; i <= n; i++)
    {
        cin >> a[i];
    }
    dfs(1);
    if (ans <= 0)
    {
        cout << -1;
    }
    else
    {
        printf("%.1lf", ans);
    }
    
    return 0;
}

你可能感兴趣的:(深度优先,c语言)