Pagini recente »
Cod sursă (job #343836)
Cod sursă (job
#343836)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("lanterna.in");
ofstream g("lanterna.out");
long long t[100000],aux,b[1000000];
long n;
int f1[100000];
void citire(long &n)
{ f>>n;
for(int i=1;i<=n;i++)
f>>t[i];
}
void ordonare(long long t[],long n)
{ int i,j;
for(i=1;i<n;i++)
for(j=1;j<=n;j++)
if(t[i]>t[j]) { aux=t[i];
t[i]=t[j];
t[j]=aux;
}
}
int min(long n)
{ int i,minn;
minn=b[1];
{
for(i=2;i<=n;i++)
if(b[i]<minn) minn=b[i];
}
return minn;
}
int max(long a,long b)
{
if(a>b) return a;
else return b;
}
void drum(long k,long long &minim,int s,long m)
{ int i,j;
if(m!=0)
{ordonare(b,m);
f1[b[1]]=0;
s=s+b[1];
k++;
m--;}
if(k==0){if(minim==0) minim=s;
else if((minim>s)&&(s>0)) minim=s;
}
else { for(i=1;i<=n;i++)
{ if(f1[i]==0)
for(j=1;j<=n;j++)
if((i!=j)&&(f1[j]==0)) { b[++m]=t[i];
b[++m]=t[j];
f1[t[i]]=1;
f1[t[j]]=1;
s=s+max(t[i],t[j]);
drum(k-2,minim,s,m);
}
}
}
}
int main()
{long long minim=0;
citire(n);
ordonare(t,n);
drum(n,minim,0,0);
g<<minim;
}