51Nod1117 聪明的木匠(最小生成树)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42391248/article/details/85223694

这道题的求解思路和求最小生成树的思路相似。

在队列中找最小的两个数出队相加,加得的数在进队列,直到队列剩一个数为止。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
priority_queue<int,vector<int>,greater<int> >q;
int main()
{
	int n,i,ans=0,t;
	cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>t;
		q.push(t);
	}
	while(q.size()>1)
	{
		t=q.top();
		q.pop();
		t+=q.top();
		q.pop();
		q.push(t);
		ans+=t;
	}
	cout<<ans<<endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42391248/article/details/85223694