贪心 每一次取最小的两个数,注意相加的数也要算‘
#include<cstring>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<queue>
using namespace std;
int main()
{
long long a[5005],i;
long long b[5005],n;
priority_queue<int> q;
while(scanf("%lld",&n)!=EOF,n)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(i=1;i<=n;i++)
scanf("%lld",&a[i]);
for(i=1;i<n;i++){
sort(a+i,a+1+n); /// 每一次都排序 也可以用优先队列
a[i+1]=b[i]=a[i]+a[i+1];
}
long long ans=0;
for(i=1;i<n;i++)
ans+=b[i];
printf("%lld\n",ans);
}
}