1. 程式人生 > >8-11 Add All uva 10954

8-11 Add All uva 10954

its style queue n) ace for 優先 pop c++

有n n小於等於五千 個數的集合s 每次可以從s中刪除兩個數 然後把他們的和放回集合 直到剩下一個數 每次操作的開銷等於刪除兩個數二之和 求最小總開銷

思路:就是每次取最小的兩個數即可

用優先級隊列

遞增:priority_queue<int,vector<int>,greater<int> >q;

遞減:priority_queue<int,vector<int>,less<int> >q;

#include<bits/stdc++.h>
using namespace std;

int main() { int n,x; while(scanf("%d",&n)==1&&n) { priority_queue<int,vector<int>,greater<int> >q; for(int i=1;i<=n;i++) { scanf("%d",&x); q.push(x); } long long sum=0;
for(int i=1;i<=n-1;i++ ) { int a=q.top();q.pop(); int b=q.top();q.pop(); q.push(a+b); sum+=a+b; } printf("%d\n",sum); } }

8-11 Add All uva 10954