zoukankan      html  css  js  c++  java
  • 洛谷P1208 [USACO1.3]混合牛奶 Mixing Milk【贪心+背包】

    由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要。帮助Marry乳业找到最优的牛奶采购方案。

    Marry乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格是不同的。此外,就像每头奶牛每天只能挤出固定数量的奶,每位奶农每天能提供的牛奶数量是一定的。每天Marry乳业可以从奶农手中采购到小于或者等于奶农最大产量的整数数量的牛奶。

    给出Marry乳业每天对牛奶的需求量,还有每位奶农提供的牛奶单价和产量。计算采购足够数量的牛奶所需的最小花费。

    注:每天所有奶农的总产量大于Marry乳业的需求量。

    输入输出格式

    输入格式:

    第 1 行共二个数值:N,(0<=N<=2,000,000)是需要牛奶的总数;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的牛奶制造公司拿到所需的牛奶所要的最小费用。

    输入输出样例

    输入样例#1: 复制

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

    输出样例#1: 复制

    630

    思路:一道比较简单的水题,用贪心的思想来做。用到了结构体数组,sort排序非常方便。

    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxn=5005;
    struct mile
    {
        int p,a;
    }s[maxn];
    bool cmp(mile a,mile b)
    {
        return a.p<b.p;
    }
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=0;i<m;++i)
            scanf("%d%d",&s[i].p,&s[i].a);
        sort(s,s+m,cmp);
        long long sum=0,temp=0;
        for(int i=0;i<m;++i)
        {
            temp+=s[i].a;
            if(temp > n)
            {
                int t=s[i].a-(temp-n);
                sum+=s[i].p*t;
                break;
            }
            sum+=s[i].a * s[i].p;
        }
        printf("%lld
    ",sum);
        return 0;
    }
    
  • 相关阅读:
    linux之awk命令
    HDU 2097 Sky数 进制转换
    HDU 2077 汉诺塔IV
    HDU 2094 产生冠军 dfs加map容器
    HDU 2073 叠框
    HDU 2083 简易版之最短距离
    HDU 2063 过山车 二分匹配
    天梯 1014 装箱问题
    天梯 1214 线段覆盖
    天梯 1098 均分纸牌
  • 原文地址:https://www.cnblogs.com/aerer/p/9930972.html
Copyright © 2011-2022 走看看