• P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G——贪心、优先队列


    [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G

    题目描述

    在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。

    每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过 n − 1 n-1 n1 次合并之后, 就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。

    因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为 1 1 1 ,并且已知果子的种类 数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。

    例如有 3 3 3 种果子,数目依次为 1 1 1 2 2 2 9 9 9 。可以先将 1 1 1 2 2 2 堆合并,新堆数目为 3 3 3 ,耗费体力为 3 3 3 。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为 12 12 12 ,耗费体力为 12 12 12 。所以多多总共耗费体力 = 3 + 12 = 15 =3+12=15 =3+12=15 。可以证明 15 15 15 为最小的体力耗费值。

    输入格式

    共两行。
    第一行是一个整数 n ( 1 ≤ n ≤ 10000 ) n(1\leq n\leq 10000) n(1n10000) ,表示果子的种类数。

    第二行包含 n n n 个整数,用空格分隔,第 i i i 个整数 a i ( 1 ≤ a i ≤ 20000 ) a_i(1\leq a_i\leq 20000) ai(1ai20000) 是第 i i i 种果子的数目。

    输出格式

    一个整数,也就是最小的体力耗费值。输入数据保证这个值小于 2 31 2^{31} 231

    样例 #1

    样例输入 #1

    3 
    1 2 9
    
    • 1
    • 2

    样例输出 #1

    15
    
    • 1

    提示

    对于 30 % 30\% 30% 的数据,保证有 n ≤ 1000 n \le 1000 n1000

    对于 50 % 50\% 50% 的数据,保证有 n ≤ 5000 n \le 5000 n5000

    对于全部的数据,保证有 n ≤ 10000 n \le 10000 n10000

    分析

    1. 此题看到就想到之前信奥做过,用的优先队列,可以看去详细解释:1369:合并果子(fruit)——优先队列
    2. 然后突然发现和前几天做的:1233:接水问题——贪心思想也一样啊,上个题采用的模拟,不断的排序;但是那太暴力了,那么多次sort,数据量一大就会tle;然后就又写了一遍优先队列;
    #include
    
    using namespace std;
    
    //小根堆
    priority_queue<int, vector<int>, greater<int>> q;
    int n, ans;
    
    int main() {
        cin >> n;
        int x;
        for (int i = 0; i < n; ++i) {
            cin >> x;
            q.push(x);
        }
        //由于每次队列出队两个,避免造成出现负数为死循环
        while (q.size() > 1) {
            int a = q.top();
            q.pop();
            int b = q.top();
            q.pop();
            q.push(a + b);
            ans += a + b;
        }
        cout << ans;
        return 0;
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    图文翻译-免费图文翻译-批量图文翻译软件
    面试题4:POST 比 GET 安全?
    45、Collections工具类
    Web模块
    Leetcode 剑指Offer
    编译版本问题androidx.appcompat:appcompat-resources 引用错误
    数据结构第二章
    Comprehensive comparison of QCN6274 and QCN9074 chip series
    map-reduce中的组件
    php基于微信小程序的医院预约挂号系统+uinapp+Mysql+计算机毕业设计
  • 原文地址:https://blog.csdn.net/weixin_51995229/article/details/127887018