8-11 Add All uva 10954
Posted bxd123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8-11 Add All uva 10954相关的知识,希望对你有一定的参考价值。
有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 ",sum); } }
以上是关于8-11 Add All uva 10954的主要内容,如果未能解决你的问题,请参考以下文章