【贪心】Stripies POJ 1862

题目描述:http://poj.org/problem?id=1862

题目大意:你有n个数要合并,每两个数x,y合并后得到2*sqrt(x*y)。求最后留下的一个数的最小值。

每合并一次,就会有数被开方,那么你越早合并的数被开放的次数越多,于是每次把最大的两个数合并即可。用到优先队列。

代码:

#include  
#include
#include
using namespace std;  
priority_queueq;  
int main()  
{  
	int n,i,tmp;  
	while(scanf("%d",&n)!=EOF)
	{
		while(!q.empty()) q.pop();
		double x,y;
		for(i=1;i<=n;i++)
			scanf("%d",&tmp),q.push(tmp);
		for(i=1;i

 

你可能感兴趣的:(贪心)