UVA 10954 - Add All
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相关推荐
- UVA 10954 Add All
UVA_10954 看了别人解题报告之后发现累加的过程可以这样操作,每次取最小的两个元素加和,然后把和当作一个新元素放进集合,直到剩下一个元素,然后把中间结果加起来就是要求的结果.实际上这个题目就是哈 ...
- UVa 10954 Add All 贪心
贪心 每一次取最小的两个数,注意相加的数也要算' #include<cstring> #include<iostream> #include<cstdio> # ...
- uva 10954——Add All
<p>题意:给定一个序列,然后从中选择两个数,相加后放入原来的序列,消耗的费用为两个数 的和,问最小的代价.</p><p> </p><p>思 ...
- π-Algorithmist分类题目(3)
原题网站:Algorithmist,http://www.algorithmist.com/index.php/Main_Page π-Algorithmist分类题目(3) Probability ...
- 紫书《算法竞赛入门经典》
紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...
- uva10954 - Add All(multiset功能)
题目:10954 - Add All 题目大意:求n个数的和,可是有点不一样的是题目要求计算最少花费.每次两个数相加,得到的那个数就是每次计算的cost. 解题思路:之前没有想到用multiset,自 ...
- 提取了下刘汝佳推荐的题号...
今天闲来没事上uva oj提取了下刘汝佳推荐的acm题号,原始数据如下: Volume 0. Getting Started 10055 - Hashmat the Brave Warrior ...
- 训练指南第二章-基础问题
训练指南第二章-基础问题 P170 2 / 4 Problem A UVA 10943 How do you add? 1 / 2 Problem B UVA 10780 Again Prime? N ...
- mysql数据库出现回滚_mysql数据库回滚
在应用$mysqli时,因没常用到数据回滚,老忘,整理下,做个记录. $mysqli->autocommit(FALSE);//自动提交设置关闭 $mysqli->query(" ...
最新文章
- win10安装程序无法将配置为在此计算机,Win10安装会遇到的问题汇总及解决方法...
- .NET Core 3.0 中的新变化
- Apache Camel日志组件示例
- python进程监控 supervisor_使用Python的Supervisor进行进程监控以及自动启动
- php生成缩略图填充白,php生成缩略图填充白边(等比缩略图方案)_PHP教程
- 解析身份证_你需要知道的与身份证相关的7个函数,让你的工作效率快速提升!...
- Parasoft C++test使用教程:执行测试用例(上)
- 转载-解决word导出pdf图片变模糊的问题
- zipOutputStream压缩后用RAR解压出现“不可预料的压缩文件末端”错误
- 跳过wifi认证直接上网
- 新媒体运营教程:教你如何写推广策划案?
- 一文搞懂各大APP网站python网络爬虫
- ac1900 linksys 恢复_tplink ac1900路由器怎么恢复出厂设置? | 192路由网
- 产业链和价值链的联系和区别?
- 将eclipse,虚拟机,mysql安装到移动硬盘上,亲测
- 高考专科分数计算机,2017年高考全国各省高职专科,录取分数线陆续公布
- java用户登录界面并连接数据库(教师工资查询)
- 项目管理文档_PPM优课第18期 | 不同项目管理模式“武装”质量管理体系的搭建...
- 使用element ui + vue时出现vue.runtime.esm.js:1737 TypeError: Cannot read property ‘$options‘ of undefined
- python毕业设计作品基于django框架的鲜花水果商城毕设成品(7)中期检查报告
热门文章
- 在Ubuntu上安装Odoo 11(企业版)
- df命令、du命令、磁盘分区(fdisk命令)
- [Hdu3652]B-number(数位DP)
- Linux学习之CentOS(二十三)--Linux软件管理之源代码以及RPM软件包管理
- 《Python数据分析与挖掘实战》读书笔记
- 防止在iOS设备中的Safari将数字识别为电话号码
- Visual Studio 2010 and .NET 4 RTM中文版发布
- python核心编程学习(第四章)
- 史上最全Android开发中100%会用到的开源框架整理(1/5)
- VIPER 和 MVVM 到底有什么区别