显然,用STL里面的单调队列做。
#include<bits/stdc++.h>
using namespace std;
int n,x,ans;
priority_queue<int,vector<int>,greater<int> >q;
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>x,q.push(x);
while(q.size()>=2){//一定要判断q.size()>=2,而不是!q.empty()
int a=q.top(); q.pop();
int b=q.top(); q.pop();
ans+=a+b;
q.push(a+b);
}
cout<<ans<<endl;
return 0;
}
本文介绍了一种利用STL中的单调队列解决特定问题的算法实现。通过优先队列进行元素的插入和删除操作,有效地计算了在一系列数值中进行两两合并所需的总代价。该算法适用于需要频繁进行最小或最大元素查找的场景。
3727

被折叠的 条评论
为什么被折叠?



