• 混合牛奶 | 贪心算法 (USACO练习题)


    一、混合牛奶 (USACO练习题)

    【问题描述】

    牛奶包装是一个如此低利润的生意,以至于尽可能低地控制初级产品(牛奶)的价格变得十分重要。请帮助Merry的牛奶制造公司(Merry Milk Makers')以尽可能最廉价的方式取得他们所需的牛奶。Merry的牛奶制造公司从一些农民那购买牛奶,每个农民卖给牛奶制造公司的价格不一定相同。而且,如一只母牛一天只能生产一定量的牛奶,农民每一天只有一定量的牛奶可以卖。每天,Merry的牛奶制造公司从每个农民那购买一定量的牛奶,少于或等于农民所能提供的最大值。现给出Merry牛奶制造公司的每日的牛奶需求,连同每个农民的可提供的牛奶量和每加仑的价格,请计算Merry的牛奶制造公司所要付出钱的最小值。

    注意:每天农民生产的牛奶的总数对Merry的牛奶制造公司来说是足够的。

    【输入格式】

    第 1 行:二个整数, N 和 M。

    第一个数值N(0<= N<=2,000,000)是Marry的牛奶制造公司的一天需要牛奶的数量。

    第二个数值,M,(0<= M<=5,000)是提供牛奶的农民个数。

    第 2 到 M+1 行:每行二个整数,Pi 和 Ai。Pi(0<= Pi<=1,000) 是农民 i 的牛奶的价格;Ai(0 <= Ai <= 2,000,000)是农民i一天能卖给Marry的牛奶制造公司的牛奶数量。

    【输出格式】

    单独的一行包含单独的一个整数,表示Marry的牛奶制造公司拿到所需的牛奶所要的最小费用。

    【样例输入】       【样例输出】

    100 5               630

    5 20

    9 40

    3 10

    8 80

    6 30

    【分析】这是一道大水题 >_<

    若要付钱最少,那找卖的最便宜的就好啦~对农民的出售价格进行排序,就没然后了.

    【代码】

     1 #include 
     2 #include 
     3 #include 
     4  
     5  struct Node {
     6         int money, can_give;
     7        Node( int x,  int y) : money(x), can_give(y) {}
     8 };
     9  
    10 std::vector nodes;
    11  
    12  bool cmp( const Node& a,  const Node& b) {
    13         return a.money < b.money;
    14 }
    15  int main() {
    16         int n, m, min_use =  0;  // n: needs; m: the number of farmers
    17         scanf( " %d %d ", &n, &m);
    18         for( int i =  0, x, y; i < m; i++) {
    19               scanf( " %d %d ", &x, &y);
    20               nodes.push_back(Node(x, y));
    21        }
    22        sort(nodes.begin(), nodes.end(), cmp);
    23         for( int i =  0, tmp; i < m; i++) {
    24               tmp = n - nodes[i].can_give;
    25                if(tmp >=  0) {
    26                      n = tmp;
    27                      min_use += nodes[i].money * nodes[i].can_give;
    28                       if(tmp ==  0) {
    29                              break;
    30                      }
    31               } else {
    32                      min_use += (nodes[i].can_give - n) * nodes[i].money;
    33                       break;
    34               }
    35        }
    36        printf( " %d\n ", min_use);
    37         return  0;
    38 }

    混合牛奶

  • 相关阅读:
    双碳时代下,数据中心PUE划红线
    npm常用命令
    SPSS列联表分析
    今年快30岁的我,还是选择了裸辞···
    谷粒商城 缓存
    多路IO复用--epoll
    Go语言面试题
    vue3中使用WangEditor 富文本编辑器
    【vue3】传送组件、Teleport
    【torch高级】一种新型的概率学语言pyro(02/2)
  • 原文地址:https://blog.csdn.net/m0_72495985/article/details/128155618