UVA 10954 Add All 全部相加 Huffman编码 双队列解
来源:互联网 发布:suse 图形化配置网络 编辑:程序博客网 时间:2024/05/09 12:14
/**========================================== * This is a solution for ACM/ICPC problem * * @source:uva 10954 * @type: 贪心(Huffman编码) 双队列解 * @author: wust_ysk * @blog: http://blog.csdn.net/yskyskyer123 * @email: 2530094312@qq.com *===========================================*/#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<queue>using namespace std;typedef long long ll;const int INF =0x3f3f3f3f;const int maxn= 5000 ;int n;int a[maxn+5]; queue<int >q[2];int choose(){ int x=INF,y=INF; if(!q[0].empty()) x=q[0].front(); if(!q[1].empty()) y=q[1].front(); if(x<y) q[0].pop(); else q[1].pop(); return min(x,y);}int main(){ while(~scanf("%d",&n)&&n) { for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+1+n); for(int i=0;i<2;i++) { while(!q[i].empty()) q[i].pop(); } for(int i=1;i<=n;i++) { q[0].push(a[i]); } int tot=0; for(int i=1;i<n;i++) { int tmp=choose()+choose();//每次取出两个队列的最小元素,然后删除之, //将两个元素的和放到第二个队列中,算上选取时的耗费 //这样一个选取过程,当初觉得编程实现并不容易,但实质上认真分析过程 //会发现每次选取两个元素 ,是两个相同的过程 ,其实这很显然 T_T tot+=tmp; q[1].push(tmp); } printf("%d\n",tot); } return 0;}
0 0
- UVA 10954 Add All 全部相加 Huffman编码 双队列解
- UVA 10954 Add All(Huffman编码)
- 例题8-11 全部相加(Add All, UVa 10954)
- UVA10954 :Add All(全部相加)
- uva - 10954 - Add All(优先队列、哈夫曼编码思想)
- 例题8-11 10954 - Add All全部相加
- UVa 10954 Add All ( 优先队列 )
- UVa 10954 - Add All 贪心+优先队列
- UVA - 10954 Add All 优先队列
- UVa 10954 Add All(优先队列)
- UVA 10954 Add All(优先队列)
- UVA 10954- Add All(优先队列)
- Add All - UVa 10954 优先队列
- uva 10954 Add All(哈弗曼编码)
- 哈夫曼编码(Add All,uva 10954)
- UVa 10954 - Add All
- UVa 10954 - Add All
- uva 10954 - Add All
- 7. JPA @Column 控制浮点数精度
- Android 内存优化与泄露
- Mesa - 谷歌近实时分析型数据仓库
- iPhone/iPad/Android UI尺寸规范
- android鼠标事件
- UVA 10954 Add All 全部相加 Huffman编码 双队列解
- // 去掉UItableview headerview黏性(sticky)
- 使用集合的一些技巧
- java之强引用、弱引用、软引用、虚引用
- 8. JPA @Temporal注解详解
- Linux 常用操作
- android import adt项目遇到问题
- 新元素从哪儿来
- 如何在spring新版官网下载spring框架包