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

poj_3253_priority queue

时间:2017-03-08 14:49:36      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:多少   思路   class   nal   stream   void   带来   思想   name   

描述

农夫约翰想要修篱墙,他需要N块木板,第i块板长Li。然后他买了一块很长的板子,足够他分成N块。忽略每次锯板子带来的损失。

约翰忘记买锯子了,于是像Don借。Don要收费,每次锯一下,就要收一次板子长度的钱。Don让约翰自己选择锯的方案。

求问约翰最少要花多少钱。

 

思路

类似Huffman编码的思想。

 

代码

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<queue>
 4 #include<functional>
 5 
 6 using namespace std;
 7 
 8 
 9 typedef long long ll;
10 const int MAX_N = 20000;
11 int N, L[MAX_N];
12 
13 void solve()
14 {
15     ll ans = 0;
16     priority_queue<int, vector<int>, greater<int>> que;
17     for (int i = 0; i<N; i++)
18     {
19         que.push(L[i]);
20     }
21 
22     while (que.size()>1)
23     {
24         int l1, l2;
25         l1 = que.top();
26         que.pop();
27         l2 = que.top();
28         que.pop();
29 
30         ans += l1 + l2;
31         que.push(l1 + l2);
32 
33     }
34     printf("%lld\n", ans);
35 }
36 
37 int main()
38 {
39     cin >> N;
40     for (int i = 0; i < N; i++)
41     {
42         cin >> L[i];
43     }
44     solve();
45     return 0;
46 }

 

poj_3253_priority queue

标签:多少   思路   class   nal   stream   void   带来   思想   name   

原文地址:http://www.cnblogs.com/zhenghao2/p/6519309.html

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