链接:http://poj.org/problem?id=3253
每次都找出最短的两个合并..优先队列
#include <iostream> #include<queue> using namespace std; int main() { int n; int i; int t; int a,b; long long ans; priority_queue< int ,vector<int>,greater<int> > que; while(cin>>n) { ans=0; for(i=0;i<n;i++) { cin>>t; que.push(t); } while(que.size()>1) { a=que.top(); que.pop(); b=que.top(); que.pop(); ans+=a+b; que.push(a+b); } cout<<ans<<endl; } return 0; }