贪心 每一次取最小的两个数,注意相加的数也要算‘
#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 ",ans); } }