题解:
非常简单的一道贪心题目,题目想让你把一串子序列切割成长度为1的字串,每次切割的代价是被切割序列的总和,这样的话我们肯定是让序列中越大的数约往后切割,因为越大的数会对每次切割产生代价会越大,所以你是尽可能的想让这个数造成更大的代价,所以我们按照从小到大的顺序排序,之后从前往后切割就可以了。
#pragma GCC optimize(3,"Ofast","inline") #include <bits/stdc++.h> const int maxn = 1e5+10; const int MaxN = 0x3f3f3f3f; const int MinN = 0xc0c0c00c; typedef long long ll; const int mod = 1e9 + 7; using namespace std; int a[maxn]; int main() { int n; cin>>n; ll sum=0; for(int i=0;i<n;i++){ scanf("%d",&a[i]); sum+=a[i]; } sort(a,a+n); ll ans=0; for(int i=0;i<n-1;i++){ ans+=sum; sum-=a[i]; } cout<<ans<<endl; return 0; }