@zhang

@zhang

天生我材必有难,千金散尽还债来 · 发布于 2024-12-01 · 浏览 482 回复 0
#include<iostream>
#include<cmath>
using namespace std;
bool dp[51][1251][1251];
int check(int x,int y,int z) {
	if(x+y<=z||x+z<=y||y+z<=x) {
		return -1;
	}
	double p=(double(x+y+z)/2);
	p=sqrt(p*(p-x)*(p-y)*(p-z));
	return p*100;
}
int main() {
	int n,total=0;
	cin>>n;
	dp[0][0][0]=true;
	for(int i=1; i<=n; i++) {
		int len;
		cin>>len;
		total+=len;
		for(int j=0; j<=total; j++) {
			for(int k=0; k+j<=total; k++) {
				dp[i][j][k]=dp[i-1][j][k];
				if(j>=len) dp[i][j][k]=dp[i][j][k]|dp[i-1][j-len][k];
				if(k>=len) dp[i][j][k]=dp[i][j][k]|dp[i-1][j][k-len];
			}
		}
	}
	int ans=-1;
	for(int i=1; i<=total/2; i++) {
		for(int j=1; j<=total/2; j++) {
			if(dp[n][i][j]) ans=max(ans,check(i,j,total-i-j));
		}
	}
	cout<<ans;
	return 0;
}

全部回复 共 0 条

还没有人回复。往下写第一条。

发表回复