done T633664
This commit is contained in:
parent
714f9830be
commit
49a3293e00
@ -1,49 +1,77 @@
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
#include <cstdint>
|
||||
#include <ios>
|
||||
#include <iostream>
|
||||
#include <istream>
|
||||
#include <unordered_set>
|
||||
#include <vector>
|
||||
|
||||
using ll = int64_t;
|
||||
|
||||
ll n;
|
||||
std::vector<ll> s;
|
||||
std::vector<ll> edg;
|
||||
// maxl = (n-1)*sum(s)
|
||||
ll n,maxl;
|
||||
std::vector<ll>s,lens;
|
||||
std::vector<std::vector<bool>> dpo;
|
||||
double ans{-1.0};
|
||||
|
||||
void setMaxl(){
|
||||
ll sums{};
|
||||
for(ll i=1;i<=n;i++){
|
||||
sums+=s[i];
|
||||
}
|
||||
maxl=(n-1)*sums;
|
||||
}
|
||||
|
||||
double getArea(double a,double b,double c){
|
||||
double s = a+b+c;
|
||||
double s = (a+b+c)/2;
|
||||
return std::sqrt(s*(s-a)*(s-b)*(s-c));
|
||||
}
|
||||
|
||||
void dfs(ll depth){
|
||||
for(ll i=0;i<edg.size()-2+depth;i++){
|
||||
ll sum{};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
int main(){
|
||||
std::iostream::sync_with_stdio(false);
|
||||
std::cin.tie(nullptr);
|
||||
std::cout.tie(nullptr);
|
||||
|
||||
std::cin>>n;
|
||||
s.reserve(n+1);
|
||||
edg.reserve(n*(n-1)/2+1);
|
||||
|
||||
for(ll i=0;i<n;i++){
|
||||
ll tmp;
|
||||
std::cin>>tmp;
|
||||
s.emplace_back(tmp);
|
||||
s.resize(n+1);
|
||||
for(ll i=1;i<=n;i++){
|
||||
std::cin>>s[i];
|
||||
}
|
||||
for(ll i=1;i<n;i++){
|
||||
for(ll j=i+1;j<=n;j++){
|
||||
lens.push_back(s[i]+s[j]);
|
||||
}
|
||||
}
|
||||
setMaxl();
|
||||
dpo.resize(maxl+1,std::vector<bool>(maxl+1,false));
|
||||
dpo[0][0]=true;
|
||||
for(ll k=0;k<(ll)lens.size();k++){
|
||||
std::vector<std::vector<bool>> dpn(maxl+1,std::vector<bool>(maxl+1,false));
|
||||
for(ll i=0;i<=maxl;i++){
|
||||
for(ll j=0;j<=maxl;j++){
|
||||
if(dpo[i][j]){
|
||||
if(i+lens[k]<=maxl){
|
||||
dpn[i+lens[k]][j]=true;
|
||||
}
|
||||
if(j+lens[k]<=maxl){
|
||||
dpn[i][j+lens[k]]=true;
|
||||
}
|
||||
dpn[i][j]=true;
|
||||
}
|
||||
}
|
||||
}
|
||||
dpo=dpn;
|
||||
}
|
||||
|
||||
for(ll i=0;i<s.size();i++){
|
||||
for(ll j=0;j<s.size();j++){
|
||||
if(i==j)continue;
|
||||
edg.emplace_back(i+j);
|
||||
for(ll i=0;i<=maxl;i++){
|
||||
for(ll j=0;j<=maxl;j++){
|
||||
if(dpo[i][j]){
|
||||
ll c = maxl-i-j;
|
||||
if(c<maxl/2.0){
|
||||
ans = std::max(ans,getArea(i, j, c));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
if(ans<0){
|
||||
std::cout<<-1<<'\n';
|
||||
}else{
|
||||
std::cout<<ll(ans*10000)<<'\n';
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user