UVA-10954 Add All

Posted ISGuXing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA-10954 Add All相关的知识,希望对你有一定的参考价值。

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1895

题目大意:类似于这道题UESTC - 1599 

就是将所有的数字最后合并为一个数字,但是每次合并需要的消耗值是等于两个数的和,求最小的消耗值。

当然是贪心,每次排序后合并最小的两个值,再题弹出那两个值,压入两值之和。再继续刚才的步骤,直到只要一个了。

用sort肯定是超时的,会自动排序的容器当然是最好的选择。用multiset就行。

AC代码:

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<set>
 4 using namespace std;
 5 int main()
 6 {
 7     int n;
 8     while(cin>>n)
 9     {
10         if(n==0)break;
11         multiset<int> s;
12         multiset<int>::iterator it;
13         int x;
14         for(int i=0;i<n;i++)
15         {
16             scanf("%d",&x);
17             s.insert(x);
18         }
19         long long int body=0;
20         int t;
21         while(s.size()!=1)
22         {
23             it=s.begin();
24             body+=(*it);
25             t=*it;
26             s.erase(it);
27             it=s.begin();
28             body+=(*it);
29             t+=(*it);
30             s.erase(it);
31             s.insert(t);
32         }
33         cout<<body<<endl;
34     }
35     return 0;
36 }

 

以上是关于UVA-10954 Add All的主要内容,如果未能解决你的问题,请参考以下文章

UVa10954 Add All (Huffman编码,优先队列)

UVA 10954 Add All

UVA - 10954 A - Add All

UVa 10954 Add All(优先队列)

8-11 Add All uva 10954

UVA - 10954 Add All (全部相加)(Huffman编码 + 优先队列)