【算法笔记】贪心专题

 int main(){
     sort(a,a+n);
     for(int i=0;i 
  

P7014 均分图书

算一下平均数,然后从第一堆开始每次把一堆搞成平均数。

感觉这里有点bug,其实是有可能出现第二堆的书全都移到第一堆也不够用的情况的,但是暂时还没想到怎么解决,先这样吧...

 int main(){
     sum=c/n; //计算平均数 
     for(int i=0;i 
  

P7015 合并果⼦

哈夫曼树的具象版,那就用构造哈夫曼树的方法来合并吧。

本解法用到了优先队列,因为构造过程不是简单的消耗元素,还会产生新的节点,我们需要在新的节点加入备选元素后,元素列表仍能保持有序,此时选择优先队列来存储备选元素是最合适的。

 int main(){
     priority_queue, greater> heap;
     //把元素全插入该优先队列
     int res = 0;
     while (heap.size() > 1){//还没用完
         int a = heap.top(); heap.pop();//取两个最小的
         int b = heap.top(); heap.pop();
         res += a + b;//加起来
         heap.push(a + b);//新节点塞回去
     }
     return res;
 }

你可能感兴趣的:(算法笔记,算法,笔记,数据结构)