AC

键盘敲碎夜深沉,代码如麻乱假真 · 发布于 2024-12-01 · 浏览 412 回复 0
#include<bits/stdc++.h>
using namespace std;
int n;
bool dp[55][1255][1255];		//dp[i][j][o]前i块木板能否组成两边长度分别为j,o的三角形;
int suml;		//总长度
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(){
	cin>>n;
	dp[0][0][0]=true;		//初始化
	for(int i=1;i<=n;i++){
		int l;
		cin>>l;
		suml+=l;
		for(int j=0;j<=suml;j++){
			for(int o=0;o+j<=suml;o++){
				dp[i][j][o]=dp[i-1][j][o];
				if(j>=l) dp[i][j][o]=dp[i][j][o]|dp[i-1][j-l][o];
				if(o>=l) dp[i][j][o]=dp[i][j][o]|dp[i-1][j][o-l];
			}
		}
	}
	int ans=-2;
	for(int j=1;j<=suml/2;j++){
		for(int o=1;o<=suml/2;o++){
			if(dp[n][j][o])
				ans=max(ans,check(j,o,suml-j-o));
		}
	}
	cout<<ans<<endl;
	return 0;
}

全部回复 共 0 条

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

发表回复