zoukankan      html  css  js  c++  java
  • 48.贪心练习:  1621 混合牛奶


     

    USACO

     时间限制: 1 s

     空间限制: 64000 KB

     题目等级 : 黄金 Gold

    题解

     查看运行结果

    题目描述 Description

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

    注意:
    每天农民生产的牛奶的总数对快乐的牛奶制造者来说足够的.

    输入描述 Input Description

    1:二个整数, NM.
    N(0<= N<=2,000,000)
    是快乐的牛奶制造者的一天需要牛奶的数量.
    M(0<= M<=5,000)
    是农民的数目.

     

    2M+1:每行二个整数,PiAi.
    Pi(0<= Pi<=1,000)
    是农民 i 牛奶的价格.
    Ai(0 <= Ai <= 2,000,000)
    是农民 i 一天能卖给快乐的牛奶制造者的牛奶数量.

    输出描述 Output Description

    单独的一行包含单独的一个整数,表示快乐的牛奶制造者拿到所需的牛奶所要的最小费用

    样例输入 Sample Input

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

    样例输出 Sample Output

    630

    数据范围及提示 Data Size & Hint

    分类标签 Tags 点此展开 

    排序 贪心 USACO

    代码:

    #include

    using namespace std;

    #include

    #include

    struct FARM{

           int price,amount;

    };

    const int INF=5001;

    FARM farm[INF];

    int n;long long sum=0;int m;

    int cmp(const FARM &a,const FARM &b)

    {

           return a.price

          

    }

    void input()

    {

           scanf("%d",&n);

           scanf("%d",&m);

           for(int i=1;i<=m;++i)

           scanf("%d%d",&farm[i].price,&farm[i].amount);

    }

    void seeksum()

    {

           sort(farm+1,farm+m+1,cmp);

           int l=0;

           while(n>0&&l

           {

                  ++l;

                  if(n-farm[l].amount>0)

                  {

                         n-=farm[l].amount;

                         sum+=farm[l].amount*farm[l].price;

                  }

                  else {

                         for(int i=1;i<=farm[l].amount;++i)

                         {

                                if(n-i==0)

                                {

                                       sum+=i*farm[l].price;

                                       n=0;

                                       return ;

                                }

                         }

                  }

                 

           }

    }

    int main()

    {

           input();

           seeksum();

           cout<<sum<<endl;

           return 0;

    }

  • 相关阅读:
    Linux Core Dump
    ODP.NET Managed正式推出
    获取EditText的光标位置
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1028 数的计算
  • 原文地址:https://www.cnblogs.com/c1299401227/p/5370775.html
Copyright © 2011-2022 走看看