解释下这个程序,详细一点,用得是什么数据结构原题是这样的佳佳的爷爷有一个苹果园,最近苹果都熟了,都从树上掉了下来,佳佳要帮爷爷把树下的苹果堆到一起,他每次可以任意选两堆合成一

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/05 23:06:55
解释下这个程序,详细一点,用得是什么数据结构原题是这样的佳佳的爷爷有一个苹果园,最近苹果都熟了,都从树上掉了下来,佳佳要帮爷爷把树下的苹果堆到一起,他每次可以任意选两堆合成一

解释下这个程序,详细一点,用得是什么数据结构原题是这样的佳佳的爷爷有一个苹果园,最近苹果都熟了,都从树上掉了下来,佳佳要帮爷爷把树下的苹果堆到一起,他每次可以任意选两堆合成一
解释下这个程序,详细一点,用得是什么数据结构
原题是这样的
佳佳的爷爷有一个苹果园,最近苹果都熟了,都从树上掉了下来,佳佳要帮爷爷把树下的苹果堆到一起,他每次可以任意选两堆合成一堆,耗费的体力是这两堆苹果苹果数量的和.他最后的目标是将所有的果子堆成一个大堆,那么他最少耗费的体力是多少呢?
要求:
(1)输入:多组测试数据,每组数据输入的第一行是一个数n,表示果子原来有多少堆,接下来n个数,每个数表示每堆苹果的个数.
(2)输出:对于每组数据,输出一个整数,表明佳佳最少需要的体力.
(3)所设计的数据结构应尽可能节省存储空间.
(4)程序的运行时间应尽可能少.
#include "stdio.h"
#include "string.h"
#include //stl队列容器
#include //stl动态数组容器
#include //stl通用算法
using namespace std;
#define M 100010
int main()
{
int i,j;
int n,x,ans;
int x1,x2;
priority_queue pq; //重载后定义优先队列的方式(这个到底是什么意思啊.)
printf("输入苹果的堆数:");
while(scanf("%d",&n)>0)
{
while(!pq.empty())
pq.pop();
printf("输入各堆苹果的个数:");
for(i=0;i1)
{
x1=pq.top();pq.pop();
x2=pq.top();pq.pop();
ans+=x1+x2;
pq.push(x1+x2);
}
printf("佳佳总共要消耗体力:");
printf("%d\n",ans);
}
return 0;
}

解释下这个程序,详细一点,用得是什么数据结构原题是这样的佳佳的爷爷有一个苹果园,最近苹果都熟了,都从树上掉了下来,佳佳要帮爷爷把树下的苹果堆到一起,他每次可以任意选两堆合成一
来302我和你详细解释