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

合并果子

时间:2017-09-10 01:14:11      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:sub   color   org   pid   blank   一点   一个   小根堆   span   

 题解还是要坚持更的,哪怕是一道基础题。

原题链接:https://www.luogu.org/problem/show?pid=1090#sub

简单来讲,这道题要让我们把元素两两合并,每次合并的代价是两元素之和,最后求一个最小代价。

贪心思想很明显,每次取两个最小的,再把这个最小的放到原来的堆里的合适的位置,直到只剩下一个堆。

手写小根堆或者STL的优先队列就可以过。

使用STL的优先队列时要注意循环取出放入的时候边界条件不是队列非空,应该是队列大小不等于1。

因为最后会剩下 一个最终的堆。

代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int n,a,x,y;
 4 priority_queue<int,vector<int>,greater<int> > q;
 5 int main(){
 6     cin >> n;
 7     for (int i=1;i<=n;i++){
 8         cin >> a;
 9         q.push(a);
10     }
11     int ans = 0;
12     while (q.size() != 1){
13         x = q.top();
14         q.pop();
15         y = q.top();
16         q.pop();
17         q.push(x+y);
18         ans = ans+x+y;
19     }
20     cout << ans << endl;
21     return 0;
22 }

 

  明天晚上翘自习去机房,期望能切几道稍微难一点的题。

  (滚去看rec

合并果子

标签:sub   color   org   pid   blank   一点   一个   小根堆   span   

原文地址:http://www.cnblogs.com/OIerShawnZhou/p/7499853.html

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