我们可以反过来想,如何将这几个线段组成一根 并且每次花费是组成的两段的和
#include<bits/stdc++.h> using namespace std; #define maxn 50005 #define LL long long LL a[maxn],b[maxn],ans=; priority_queue<int,vector<int>,greater<int> >q; int main(){ LL n; cin>>n; ;j<=n;j++){ scanf("%lld",&a[j]); q.push(a[j]); } LL ans=; ){ int l1=q.top(); q.pop(); int l2=q.top(); q.pop(); ans+=l1+l2; q.push(l1+l2); } cout<<ans<<endl; ; }