http://uva.onlinejudge.org/external/109/10954.html

题意:

输入一串数据,拿出两个相加,把和放回去,再拿出两个相加,把和放回去……依次循环,最后找出最小的和。

思路:

使用优先队列+贪心,队列按从小到大排列,每次选出队首最小的2个数据,计算之后把和再放回队列。也就是哈夫曼编码算法。

Using a Priority Queue, you can greedily take the two smallest numbers, add them and insert them back into the Priority Queue. 1 #include <iostream>

#include <iostream>
#include <queue>
#include <cstdlib>
#include <cstdio>
#include <cstring>
using namespace std;
class T{public :int n;
};bool operator < (const T &t1, const T &t2)
{return t1.n > t2.n;
}
class AddAll{private:priority_queue<T> pri_que;int sum;public:void init();void process();
//        void output();
};
void AddAll::init(){while(!pri_que.empty())pri_que.pop();sum = 0;
}
void AddAll::process(){int num;T temp;while(cin>>num){if (num == 0)break;init();while(num--){cin>>temp.n;pri_que.push(temp);}while(!pri_que.empty()){T top1 ,top2 ,sumTop;top1 = pri_que.top();pri_que.pop();if(!pri_que.empty()){top2 = pri_que.top();pri_que.pop();}elsetop2.n = 0;sumTop.n = top1.n + top2.n;sum = sumTop.n + sum;if(!pri_que.empty())pri_que.push(sumTop);}cout<<sum<<endl;}
}
int main()
{
//    #ifndef ONLINE_JUDGE
//        freopen("D:\\acm.txt","r",stdin);
//    #endif // ONLINE_JUDGE
AddAll addall;addall.process();return 0;
}

注意:要重载'<',使优先队列从小到大排列。

测试数据:

数据来源:http://www.algorithmist.com/index.php?title=UVa_10954

Input

3
1 2 3
4
1 2 3 4
10
100000 100000 100000 100000 100000 100000 100000 100000 100000 100000
5
2 2 2 2 3
0

Output 

9
19
3400000
26

转载于:https://www.cnblogs.com/ohxiaobai/p/4487841.html

UVA 10954 - Add All相关推荐

  1. UVA 10954 Add All

    UVA_10954 看了别人解题报告之后发现累加的过程可以这样操作,每次取最小的两个元素加和,然后把和当作一个新元素放进集合,直到剩下一个元素,然后把中间结果加起来就是要求的结果.实际上这个题目就是哈 ...

  2. UVa 10954 Add All 贪心

    贪心   每一次取最小的两个数,注意相加的数也要算' #include<cstring> #include<iostream> #include<cstdio> # ...

  3. uva 10954——Add All

    <p>题意:给定一个序列,然后从中选择两个数,相加后放入原来的序列,消耗的费用为两个数 的和,问最小的代价.</p><p> </p><p>思 ...

  4. π-Algorithmist分类题目(3)

    原题网站:Algorithmist,http://www.algorithmist.com/index.php/Main_Page π-Algorithmist分类题目(3) Probability ...

  5. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

  6. uva10954 - Add All(multiset功能)

    题目:10954 - Add All 题目大意:求n个数的和,可是有点不一样的是题目要求计算最少花费.每次两个数相加,得到的那个数就是每次计算的cost. 解题思路:之前没有想到用multiset,自 ...

  7. 提取了下刘汝佳推荐的题号...

    今天闲来没事上uva oj提取了下刘汝佳推荐的acm题号,原始数据如下: Volume 0. Getting Started    10055 - Hashmat the Brave Warrior ...

  8. 训练指南第二章-基础问题

    训练指南第二章-基础问题 P170 2 / 4 Problem A UVA 10943 How do you add? 1 / 2 Problem B UVA 10780 Again Prime? N ...

  9. mysql数据库出现回滚_mysql数据库回滚

    在应用$mysqli时,因没常用到数据回滚,老忘,整理下,做个记录. $mysqli->autocommit(FALSE);//自动提交设置关闭 $mysqli->query(" ...

最新文章

  1. win10安装程序无法将配置为在此计算机,Win10安装会遇到的问题汇总及解决方法...
  2. .NET Core 3.0 中的新变化
  3. Apache Camel日志组件示例
  4. python进程监控 supervisor_使用Python的Supervisor进行进程监控以及自动启动
  5. php生成缩略图填充白,php生成缩略图填充白边(等比缩略图方案)_PHP教程
  6. 解析身份证_你需要知道的与身份证相关的7个函数,让你的工作效率快速提升!...
  7. Parasoft C++test使用教程:执行测试用例(上)
  8. 转载-解决word导出pdf图片变模糊的问题
  9. zipOutputStream压缩后用RAR解压出现“不可预料的压缩文件末端”错误
  10. 跳过wifi认证直接上网
  11. 新媒体运营教程:教你如何写推广策划案?
  12. 一文搞懂各大APP网站python网络爬虫
  13. ac1900 linksys 恢复_tplink ac1900路由器怎么恢复出厂设置? | 192路由网
  14. 产业链和价值链的联系和区别?
  15. 将eclipse,虚拟机,mysql安装到移动硬盘上,亲测
  16. 高考专科分数计算机,2017年高考全国各省高职专科,录取分数线陆续公布
  17. java用户登录界面并连接数据库(教师工资查询)
  18. 项目管理文档_PPM优课第18期 | 不同项目管理模式“武装”质量管理体系的搭建...
  19. 使用element ui + vue时出现vue.runtime.esm.js:1737 TypeError: Cannot read property ‘$options‘ of undefined
  20. python毕业设计作品基于django框架的鲜花水果商城毕设成品(7)中期检查报告

热门文章

  1. 在Ubuntu上安装Odoo 11(企业版)
  2. df命令、du命令、磁盘分区(fdisk命令)
  3. [Hdu3652]B-number(数位DP)
  4. Linux学习之CentOS(二十三)--Linux软件管理之源代码以及RPM软件包管理
  5. 《Python数据分析与挖掘实战》读书笔记
  6. 防止在iOS设备中的Safari将数字识别为电话号码
  7. Visual Studio 2010 and .NET 4 RTM中文版发布
  8. python核心编程学习(第四章)
  9. 史上最全Android开发中100%会用到的开源框架整理(1/5)
  10. VIPER 和 MVVM 到底有什么区别