码迷,mamicode.com
首页 > 其他好文 > 详细

8-11 Add All uva 10954

时间:2019-02-25 13:46:15      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:+=   col   style   队列   sum   priority   for   print   span   

有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

标签:+=   col   style   队列   sum   priority   for   print   span   

原文地址:https://www.cnblogs.com/bxd123/p/10430317.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!