zoukankan      html  css  js  c++  java
  • USACO Section 1.3 Mixing Milk 解题报告

    题目

    题目描述

    Merry Milk Makers 公司的业务是销售牛奶。它从农夫那里收购N单位的牛奶,然后销售出去。现在有M个农夫,每个农夫都存有一定量的牛奶,而且每个农夫都会有自己的定价。假设所有农夫的牛奶量总是可以满足MMM公司的进货量,现在我们需要做的就是计算出MMM最少需要花费多少钱来购买N单位的牛奶。

    数据输入第一行给出两个整数N与M,接下来依次给出每个农夫牛奶的单价Pi与存有的牛奶的量Ai。

    数据范围

    1. 0 <= N <= 2000000
    2. 0 <= M <= 5000
    3. 0 <= Pi <= 1000
    4. 0 <= Ai <= 2000000

    样例输入

    100 5
    5 20
    9 40
    3 10
    8 80
    6 30
    

    样例输出

    630

    解题思路

    贪心算法,我们利用农夫牛奶的单价进行从小到大排序,然后我们按照这个顺序依次购买牛奶即可。

    解题代码

    /*
    ID: yinzong2
    PROG: milk
    LANG: C++11
    */
    #define MARK
    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    
    using namespace std;
    const int MAXN = 5000+10;
    
    int n,m;
    
    struct Farmer {
        int price;
        int amount;
    }f[MAXN];
    
    bool cmp(Farmer a, Farmer b) {
        return a.price <= b.price;
    }
    
    int main() {
    #ifdef MARK
        freopen("milk.in", "r", stdin);
        freopen("milk.out", "w", stdout);
    #endif // MARK
        while(~scanf("%d%d", &n, &m)) {
            for(int i = 0; i < m; i++) {
                scanf("%d%d", &f[i].price, &f[i].amount);
            }
            sort(f, f+m, cmp);
            int sum = 0;
            for(int i = 0; i < m && n > 0; i++) {
                if(f[i].amount <= n) {
                    n -= f[i].amount;
                    sum += (f[i].amount * f[i].price);
                } else {
                    sum += (n * f[i].price);
                    n = 0;
                    break;
                }
            }
            printf("%d
    ", sum);
        }
        return 0;
    }
    
  • 相关阅读:
    打包成exe可执行文件的方法
    Html 重要单词归纳
    python基础---递归函数 知识点自查填空题
    python基础---内置函数 和 匿名函数 知识点自查填空题
    python基础---递归函数真题解析
    python 日记 day4。
    python 日记 day5 字典
    python 日记 day3
    python 日记 day4
    python 日记 day1
  • 原文地址:https://www.cnblogs.com/yinzm/p/5821254.html
Copyright © 2011-2022 走看看