洛谷P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G

 题目传送门:

https://www.luogu.com.cn/problem/P1090https://www.luogu.com.cn/problem/P1090本题可以使用优先队列实现

优先队列,就是默认排序的堆。

自动排序的优先队列(大者在顶端):

priority_queue<int> q;

 当要使小者在顶端时:

priority_queue<int, vector<int>, greater<int> > q;

优先队列常用操作:

pop()
push()
top()
empty()
size()

 本题中需要使用小顶堆,就是:

​priority_queue<int, vector<int>, greater<int> > q;

首先输入n个x,将x们推入到q中;

接下来,判断当q.size()大于1时,把顶端两个加和(顶端两个最小,贪心策略);

再将加和的值用s加和,到最终就是答案;

每一步将两个top()的值的和推入q中,继续寻找前二小的值。

#include <bits/stdc++.h>
#define int long long

using namespace std;

int n, x, s;
priority_queue<int, vector<int>, greater<int> > q;  //小顶堆,小的在top

signed main () {
	
	cin >> n;
	
	while (n--) {
		cin >> x;
		q.push(x);
	}
	
	while (q.size() > 1) {
		int t = q.top(); q.pop();
		t += q.top(); q.pop();
		s += t;
		q.push(t);
	}
	
	cout << s;
	
	return 0;
}

AC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值