zoukankan      html  css  js  c++  java
  • UVa 10954 Add All(优先队列)

    题意  求把全部数加起来的最小代价  a+b的代价为(a+b)  

    越先运算的数  要被加的次数越多  所以每次相加的两个数都应该是剩下序列中最小的数  然后结果要放到序列中  也就是优先队列了

    #include<cstdio>
    #include<queue>
    using namespace std;
    priority_queue<int, vector<int>, greater<int> >q;
    typedef long long ll;
    ll ans;
    int main()
    {
        int n, t;
        while(scanf("%d", &n), n)
        {
            for(int i = 0; i < n; ++i)
            {
                scanf("%d", &t);
                q.push(t);
            }
    
            ans = 0;
            while(!q.empty())
            {
                int a = q.top();      q.pop();
                int b = q.top();      q.pop();
                ans += (a + b);
                if(q.empty()) break;
                q.push(a + b);
            }
            printf("%lld
    ", ans);
       }
        return 0;
    }



    Yup!! The problem name reflects your task; just add a set of numbers. But you may feel yourselves condescended, to write a C/C++ program just to add a set of numbers. Such a problem will simply question your erudition. So, let’s add some flavor of ingenuity to it.

    Addition operation requires cost now, and the cost is the summation of those two to be added. So, to add 1 and 10, you need a cost of11. If you want to add 12 and 3. There are several ways –

    1 + 2 = 3, cost = 3

    3 + 3 = 6, cost = 6

    Total = 9

    1 + 3 = 4, cost = 4

    2 + 4 = 6, cost = 6

    Total = 10

    2 + 3 = 5, cost = 5

    1 + 5 = 6, cost = 6

    Total = 11

    I hope you have understood already your mission, to add a set of integers so that the cost is minimal.

    Input

    Each test case will start with a positive number, N (2 ≤ N ≤ 5000) followed by N positive integers (all are less than 100000). Input is terminated by a case where the value of N is zero. This case should not be processed.

    Output

    For each case print the minimum total cost of addition in a single line.

    Sample Input                           Output for Sample Input

    3

    1 2 3

    4

    1 2 3 4

    0

     

    9

    19

     






  • 相关阅读:
    队列加分项
    队列课下作业
    20162306 2017-2018-1 《程序设计与数据结构》第7周学习总结
    20162306 2017-2018-1 《程序设计与数据结构》第5周学习总结
    20162306陈是奇 第一次实验报告
    20162306 2017-2018-1 《程序设计与数据结构》第3周学习总结
    20162306 陈是奇 2017-2018-1 《程序设计与数据结构》第1周学习总结
    数据库实验补充
    2017-2018-1 20162304 实验二 树
    队列加分项
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7136309.html
Copyright © 2011-2022 走看看