思路
贪心正解。用优先队列,每次把最小的两个果子合并了,得到的是最优解。
代码
#include<bits/stdc++.h> using namespace std; priority_queue<int,vector<int> , greater<int> >q; int n,a,b,ans=0; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a); q.push(a); } while(q.size()!=1){ a=q.top(); q.pop(); b=q.top(); q.pop(); ans+=a+b; q.push(a+b); } printf("%d",ans); return 0; }