done T633664
This commit is contained in:
parent
714f9830be
commit
49a3293e00
@ -1,49 +1,77 @@
|
|||||||
|
#include <algorithm>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
#include <ios>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <istream>
|
|
||||||
#include <unordered_set>
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
using ll = int64_t;
|
using ll = int64_t;
|
||||||
|
|
||||||
ll n;
|
// maxl = (n-1)*sum(s)
|
||||||
std::vector<ll> s;
|
ll n,maxl;
|
||||||
std::vector<ll> edg;
|
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 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));
|
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(){
|
int main(){
|
||||||
std::iostream::sync_with_stdio(false);
|
|
||||||
std::cin.tie(nullptr);
|
|
||||||
std::cout.tie(nullptr);
|
|
||||||
|
|
||||||
std::cin>>n;
|
std::cin>>n;
|
||||||
s.reserve(n+1);
|
s.resize(n+1);
|
||||||
edg.reserve(n*(n-1)/2+1);
|
for(ll i=1;i<=n;i++){
|
||||||
|
std::cin>>s[i];
|
||||||
for(ll i=0;i<n;i++){
|
}
|
||||||
ll tmp;
|
for(ll i=1;i<n;i++){
|
||||||
std::cin>>tmp;
|
for(ll j=i+1;j<=n;j++){
|
||||||
s.emplace_back(tmp);
|
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 i=0;i<=maxl;i++){
|
||||||
for(ll j=0;j<s.size();j++){
|
for(ll j=0;j<=maxl;j++){
|
||||||
if(i==j)continue;
|
if(dpo[i][j]){
|
||||||
edg.emplace_back(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