• 洛谷 p1090 合并果子


    题意是有一堆果子,一次合并两堆果子,每次消耗的体力是两堆果子的总和,求合成一堆消耗的最小体力

    很经典的贪心题,贪心思想没什么好说的,每次选最小的两堆就行

    但是这道题可以很完美地通过优先队列解决,同时通过这题了解到c++中优先队列的使用,格式是 priority_queue<数据类型,存储容器类型, 优先的判定方式>

    每次从对头出两个元素加起来再加到队列直到队列元素为1即可,优先队列可以动态地通过某种法则将新来元素插入适当位置,而不是无脑地插入队尾,本题就是元素小的优先插到前面

    #include<bits/stdc++.h>
    using namespace std;
    
    int main(){
      ios::sync_with_stdio(false);
      priority_queue< int, vector<int>, greater<int> > pq;
      int n;
      cin >> n;
    
      int tmp;
      for(int i=0; i<n; i++){
        cin >> tmp;
        pq.push(tmp);
      }
    
      int res=0;
      while( pq.size() >= 2 ){
        int a = pq.top();
        pq.pop();
        int b = pq.top();
        pq.pop();
    
        res += a+b;
        pq.push(a+b);
      }
    
      cout << res;
      return 0;
    }
  • 相关阅读:
    在navgationController中添加UISegmentedControl
    Static Const
    .pch头文件的添加
    数据库设计一对一多对多
    数据库链接
    File增删改查
    线程
    售票情景解读synchronized和Lock两种锁的区别
    [Spring Boot]使用自定义注解统一请求返回值
    JAVA希尔排序代码
  • 原文地址:https://www.cnblogs.com/ssNiper/p/11253397.html
Copyright © 2020-2023  润新知