定义一个从小到大的优先队列
priority_queue<int,vector<int>,greater<int> >q;
每次从队列中去除最小的连个数相加,再将相加后的数放到队列中,使之重新排序
完整代码
#include <bits/stdc++.h> using namespace std; priority_queue<int,vector<int>,greater<int> >q; int main() { int n,m,sum,ans=0; cin>>n; for(int i=0;i<n;i++) { cin>>m; q.push(m); } for(int i=n-1;i>0;i--) { sum=0; for(int j=1;j<=2;j++) { sum+=q.top(); q.pop(); } ans+=sum; q.push(sum); } cout<<ans<<endl; return 0; }