第一段:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,ans=0,a[10005];
cin>>n;
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
for(int i=1;i<n;i++)
{
a[i+1]+=a[i];
a[i]=0;
ans+=a[i+1];
for(int j=i+1;j<n;j++)
{
if(a[j]>a[j+1])
swap(a[j],a[j+1]);
else
break;
}
}
cout<<ans;
return 0;
}
第二段:
#include<bits/stdc++.h>
using namespace std;
long long N,n1[10001],n2[10000000],i,j,s,l,ii,iii,min1,min2,ans=0,sum=0;
bool cmp(int x,int y)
{
return x<y;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>N;
for(i=1;i<=N;i++)
{
cin>>n1[i];
sum+=n1[i];
}
n1[i]=INT_MAX;
memset(n2,0,sizeof(n2));
sort(n1+1,n1+1+N,cmp);
n2[1]=n1[1]+n1[2];
ans+=n2[1];
s=1;
l=1;
i=3;
j=3;
while(i<=N)
{
if(n1[j]>n2[l])
{
min1=n2[l];
n2[l]=0;
l++;
if(l>s)
{
min2=n1[j];
j++;
}
else if(n1[j]>n2[l])
{
min2=n2[l];
n2[l]=0;
l++;
}
else
{
min2=n1[j];
j++;
}
}
else
{
min1=n1[j];
j++;
if(n1[j]>n2[l])
{
min2=n2[l];
n2[l]=0;
l++;
}
else
{
min2=n1[j];
j++;
}
}
i=j;
ans+=min1+min2;
if(l>s)
s=l;
s++;
for(ii=l;ii<=s;ii++)
{
if(min1+min2<n2[ii])
{
for(iii=s;iii>=ii;iii--)
n2[iii]=n2[iii-1];
n2[ii]=min1+min2;
break;
}
else if(n2[ii]==0)
{
n2[ii]=min1+min2;
break;
}
}
}
if(n2[l]!=sum)
ans+=n2[l]+n2[l+1];
cout<<ans;
return 0;
}