zoukankan      html  css  js  c++  java
  • poj_3253_priority queue

    描述

    农夫约翰想要修篱墙,他需要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
    ", 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 }
  • 相关阅读:
    Vue单向数据流
    npm常用命令
    vue自定义指令
    slot的用法(Vue插槽)
    js闭包
    canvas 给画的多边形着色
    canvas画线
    canvas初体验
    canvas
    json
  • 原文地址:https://www.cnblogs.com/zhenghao2/p/6519309.html
Copyright © 2011-2022 走看看