堆--poj3253
来源:互联网 发布:青蚨在线网络贷款 编辑:程序博客网 时间:2024/06/06 02:31
题意:给几段切完了的木头,问原木棒如何切才能花费最少(花费为要切的木棒长度,比如刚开始21,切成13和8,然后切13的,花费为13)。
思路:用堆构造哈夫曼树,每次选出最大的两个元素,然后把她们的和重新放回堆中,直到堆中仅剩一个节点。
代码:
#include<iostream>#include<algorithm>using namespace std;const int maxn=20000+10;long n,len;long long p[maxn];void heap_insert(long long k){ long t=++len; p[t]=k; while(t>1) { if(p[t/2]>p[t]) { swap(p[t/2],p[t]); t/=2; } else break; }}void heap_adjust(){ long t=1; p[t]=p[len--]; while(2*t<=len) { long long k=2*t; if(p[k]>p[k+1]&&k<len) ++k; if(p[t]>p[k]) { swap(p[t],p[k]); t=k; } else break; }}int main(){ cin>>n; for(long i=1; i<=n; i++) cin>>p[i]; len=0; for(int i=1; i<=n; i++) heap_insert(p[i]); long long ans=0; while(len>1) { long long a,b; a=p[1]; heap_adjust(); b=p[1]; heap_adjust(); ans+=a+b; heap_insert(a+b); } cout<<ans<<endl; return 0;}
- 堆--poj3253
- 【poj3253】堆的应用
- poj3253【贪心+堆(STL)】
- poj3253 堆/优先队列
- poj3253--pat---优先队列---堆
- c语言二叉堆《学习记录》poj3253
- Frence Repair POJ3253 POJ2431 堆排序
- poj3253
- POJ3253
- poj3253
- poj3253
- poj3253
- poj3253
- POJ3253
- poj3253
- POJ3253
- poj3253
- poj3253
- cocos2d-x android c++调用java
- Java随机字符串
- 关于ztree打开关闭所有节点,选中指定id节点
- socket linux windows
- Spring Data JPA
- 堆--poj3253
- ubuntu 12.04 新手帖
- asp.net 定时间点执行任务的简易解决办法
- HTML 5 <base> 标签
- IOS高级开发~开机启动&无限后台运行&监听进程
- 学习Python(十二)
- HDOJ 1061Rightmost Digit
- C#——SQLite速成 .
- Unity3D手机游戏开发