版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42391248/article/details/85223694
这道题的求解思路和求最小生成树的思路相似。
在队列中找最小的两个数出队相加,加得的数在进队列,直到队列剩一个数为止。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
priority_queue<int,vector<int>,greater<int> >q;
int main()
{
int n,i,ans=0,t;
cin>>n;
for(i=0;i<n;i++)
{
cin>>t;
q.push(t);
}
while(q.size()>1)
{
t=q.top();
q.pop();
t+=q.top();
q.pop();
q.push(t);
ans+=t;
}
cout<<ans<<endl;
return 0;
}