您的位置:首页 > 编程语言 > C语言/C++

2004noip 提高组 合并果子

2017-07-06 11:30 204 查看
可以这么理解将所有果子放入盒子中,取出最小的两个,合并后放回,如此反复直到盒子中只剩一个为止

//队列:将最小的拿出之后在讲合并后的推入如此反复
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
priority_queue<int,vector<int>,greater<int> >fruit; //优先队列,自动让队列中的元素由小到大排序
int main()
{
int n;
int total=0;//力气总量
int temp=0;
int theweightoffruit;//果子的重量
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&theweightoffruit);
fruit.push(theweightoffruit);//每输入一个果子的重量,他将由小到大排序
}
for(int i=0;i<n-1;i++){
temp=fruit.top();//弹出顶部元素,即最小的一堆
fruit.pop();//弹出当前最小的元素
temp+=fruit.top();//读取当前最小的一堆并与前一个元素合并
fruit.pop();//弹出第二小的元素
fruit.push(temp);//再将合并后的元素压入队列中
total+=temp;//那么花费的总力气再加上盒子里的就可以
}
printf("%d",total);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++