文章

9

粉丝

126

获赞

11

访问

51.7k

头像
优先队列合并果子
P1544 中南大学机试题
发布于2022年3月7日 11:13
阅读数 4.9k

新手

#include <iostream> 
using namespace std;
#include <queue>
#include <vector>

int main ()
{
	int n, sum = 0, sum2 = 0;
	scanf ("%d", &n);
	priority_queue<int, vector<int>, greater<int> > q;//小根堆,升序排列
	for (int i = 0; i < n; i++)
	{
		int x;
		scanf ("%d", &x);
		q.push(x) ;
	}
	while (!q.empty() )//循环条件:队列不空
	{
		if (sum != 0)//对初始条件进行判断
			q.push(sum) ;
		sum = q.top() ;
		q.pop() ;
		sum += q.top() ;//队首前两个元素之和
		q.pop() ;
		sum2 += sum;//累加
	}
	cout << sum2 << endl;
	
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发