题目1107:搬水果
2014-02-22 17:29
253 查看
// 很简单的一种方法:堆
// 树的带权路径长度等于非叶子节点权值之和,所以和上一次的哈夫曼树是完全相同的。
#include<stdio.h>
#include<queue>
using namespace std;
priority_queue<int,vector<int>,greater<int> > Q; // 小顶堆
int main()
{
int n;
while(scanf("%d\n",&n)!=EOF){
if(n==0) break;
while(Q.empty()==false) Q.pop();
while(n--){
int x;
scanf("%d",&x);
Q.push(x);
}
int ans=0,tmp=0;
while(Q.size()>1){
int a=Q.top(); Q.pop(); // 取出堆中两个最小值并出堆,并把和存入堆中,
int b=Q.top(); Q.pop();
ans+=a+b;
Q.push(a+b);
}
printf("%d\n",ans);
}
return 0;
}
// 树的带权路径长度等于非叶子节点权值之和,所以和上一次的哈夫曼树是完全相同的。
#include<stdio.h>
#include<queue>
using namespace std;
priority_queue<int,vector<int>,greater<int> > Q; // 小顶堆
int main()
{
int n;
while(scanf("%d\n",&n)!=EOF){
if(n==0) break;
while(Q.empty()==false) Q.pop();
while(n--){
int x;
scanf("%d",&x);
Q.push(x);
}
int ans=0,tmp=0;
while(Q.size()>1){
int a=Q.top(); Q.pop(); // 取出堆中两个最小值并出堆,并把和存入堆中,
int b=Q.top(); Q.pop();
ans+=a+b;
Q.push(a+b);
}
printf("%d\n",ans);
}
return 0;
}
相关文章推荐
- 九度题目1107:搬水果
- 题目1107:搬水果
- 题目1107:搬水果
- 九度OJ题目1107:搬水果
- 题目1107:搬水果
- 题目1107:搬水果
- 九度 题目1107:搬水果
- 31-题目1107:搬水果
- 题目1107:搬水果
- 哈夫曼树应用——九度OJ题目1107:搬水果
- 题目1107:搬水果(哈夫曼树+快速排序+冒泡排序)
- 哈夫曼树应用——九度OJ题目1107:搬水果
- 题目1107:搬水果【哈夫曼树模型】
- 题目1107:搬水果 九度OJ
- 题目1107:搬水果(哈夫曼树)
- 题目1107:搬水果
- 【九度OJ】题目1107:搬水果 解题报告
- 九度题目-1107:搬水果
- 九度题目1107:搬水果
- 九度OJ——1107搬水果