码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 1862 - Stripies

时间:2017-07-26 21:54:29      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:队列   class   mat   编码   queue   nbsp   scan   ble   需要   

一道贪心的水题,读完题目,直接把样例的三个数试一试,就知道怎么一种组合方式会产生最小的结果。

(让我想起了哈弗曼编码,用了优先队列)

 1 #include<cstdio>
 2 #include<queue>
 3 #include<cmath>
 4 using namespace std;
 5 int n;
 6 int main()
 7 {
 8     while(scanf("%d",&n)!=EOF)
 9     {
10         priority_queue<double> q;
11         double tmp;
12         for(int i=1;i<=n;i++)
13         {
14             scanf("%lf",&tmp);
15             q.push(tmp);
16         }
17         for(int i=1;i<n;i++)
18         {
19             double x=q.top();q.pop();
20             double y=q.top();q.pop();
21             q.push( 2 * sqrt(x*y) );
22         }
23         printf("%.3f\n",q.top());
24     }
25 } 

需要注意的是,POJ上那个double类型的printf,需要用%f而不是%lf,要不然就WA。

具体为什么是这样,那道题的discuss里有。

 

POJ 1862 - Stripies

标签:队列   class   mat   编码   queue   nbsp   scan   ble   需要   

原文地址:http://www.cnblogs.com/dilthey/p/7241632.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!