A21705.合并果子 题解
2024-05-11 22:54:04
发布于:浙江
37阅读
0回复
0点赞
这个题目个人认为比较简单,大致如下:
先把每一堆果子的重量入优先队列,取出最前面两个,也就是当前最小的两堆果子,这样可以保证用的力气最小。合并之后,再将这个值放到队列中,再重复前面的操作,直至只剩下一堆。
上代码:
# include <bits/stdc++.h>
using namespace std;
int main()
{
int answer = 0;
priority_queue<int,vector<int>,greater<int> > q; //优先队列
int n;
cin >> n;
for(int i = 0; i < n; i++)
{
int x;
cin >> x;
q.push(x); //把每一堆果子的重量入优先队列
}
while(q.size()>=2) //当还剩大于等于两堆果子时
{
int t, b;
t = q.top();
q.pop();
b = q.top();
q.pop();
answer += t+b; //所花力气和加上本次花的力气
q.push(t+b); //再将这个值放到队列中
}
cout << answer; //输出
return 0;
}
严禁抄袭,打造文明ACGO!谢谢
全部评论 1
hello,排位赛#8的获奖通知已发送短信啦,记得查看短信对应链接,填写信息领取奖品哦!
2024-05-21 来自 浙江
0
有帮助,赞一个