RE求调
查看原帖
RE求调
664105
BalanceSegment楼主2022/1/27 09:51
#include<bits/stdc++.h>
#define N 405
using namespace std;
int ans;
int i,j,k,sum,n;
int d[N];
bool dp[N][N];
int fn(int a,int b,int c){
	double p=(a+b+c)/2;
 	return sqrt(p*(p-a)*(p-b)*(p-c));
}
int main(){
	ans=0;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>d[i];
		sum+=d[i];
	}
	memset(dp,false,sizeof(dp));
	dp[0][0]=true;
	for(int k=1;k<=n;k++)
		for(int i=sum;i>=0;i++)
			for(int j=sum;j>=0;j++){
				if (i>=d[k])
					dp[i][j]=dp[i][j]||dp[i-d[k]][j]; 
  				if (j>=d[k])
				    dp[i][j]=dp[i][j]||dp[i][j-d[k]];
  				if (dp[i][j]) 
				  	ans=max(ans,fn(i,j,sum-i-j));
			}
	if(ans==0)
		cout<<-1;
	else
		cout<<round(ans*100);	
	return 0;
}

2022/1/27 09:51
加载中...