求调
查看原帖
求调
1268479
yangdicheng2013楼主2024/11/24 20:10
#include<bits/stdc++.h>
using namespace std;

#define int long long
#define double long double
#define endl '\n'
#define pii pair<int, int>
#define MAXN 45
#define mod 10007
struct triangle {
    int a, b, c;
    double S;
};
triangle dp[MAXN];
int l[MAXN];
int ans = 0;
double Helen(int a, int b, int c) {
    double p = (a + b + c) / 2;
    double S = sqrt(p * (p - a) * (p - b) * (p - c));
    return S;
}
int Ahelen(int a, int b, int c) {
    return Helen(a, b, c) * 100;
}
void dfs(int i, int a, int b, int c) {
    if(i == 0) {
        if(a == 0 || b == 0 || c == 0 || a + b < c || b + c < a || a + c < b)
            return ;
        ans = max(ans, Ahelen(a, b, c));
        return ;
    }
    dfs(i - 1, a + l[i], b, c);
    dfs(i - 1, a, b + l[i], c);
    dfs(i - 1, a, b, c + l[i]);
}
signed main() {
//    ios::sync_with_stdio(0);
//    cin.tie(0);
//    cout.tie(0);

//	freopen(".in", "r", stdin);
//	freopen(".out", "w", stdout);
    int N;
    cin >> N;
    for(int i = 1; i <= N; i++) {
        cin >> l[i];
    }
//	dfs(N, 0, 0, 0);
	dp[0] = {0, 0, 0, 0};
    for(int i = 1; i <= N; i++) {
        dp[i] = dp[i - 1];
        int A = Ahelen(dp[i - 1].a + l[i], dp[i - 1].b, dp[i - 1].c);
        int B = Ahelen(dp[i - 1].a, dp[i - 1].b + l[i], dp[i - 1].c);
        int C = Ahelen(dp[i - 1].a, dp[i - 1].b, dp[i - 1].c + l[i]);
        if(A >= B && A >= C) {
            dp[i].S = A;
            dp[i].a += l[i];
        } else if(B >= A && B >= C) {
            dp[i].S = B;
            dp[i].b += l[i];
        } else if(C >= A && C >= B) {
            dp[i].S = C;
            dp[i].c += l[i];
        }
    }
    cout << dp[N].S;
    return 0;
}
2024/11/24 20:10
加载中...