Mixing Milk

Mixing Milk

Description

Merry乳业公司从奶农手中采购牛奶,将其加工之后卖给超市,这样我们就可以用美味的谷物和牛奶开始新的一天。
乳制品产业的利润非常低,所以将牛奶成本开销尽可能的降低就变得非常关键。请你帮助Merry乳业公司以最便宜的方式购买奶农的牛奶。Merry乳业公司拥有一个非常有才华的营销部门,他们确切地知道他们每天需要为他们的客户加工多少牛奶。
该公司与几个奶农签订了合同,公司可以从这些奶农那里采购牛奶,每个奶农都可能以不同的价格向加工厂出售他们的牛奶。当然,一群奶牛每天只能生产这么多牛奶,所以农民们已经知道他们可以提供多少牛奶。
每天Merry乳业公司可以从奶农那里购买整数个单位的牛奶,这个数字总是小于或等于农民的限制(可能是该农民的整个生产,没有生产,或任何中间的整数)。
给出:
• Merry乳业公司每天对牛奶的需求量
• 每位奶农提供牛奶的单价
• 每位奶农所能提供牛奶的产量
计算Merry乳业公司要达到他们每天牛奶需求量的最小花费。
注意:即使价格很高,奶农每天生产的牛奶总量也足以满足Merry乳业公司的需求。

PROGRAM NAME: milk

INPUT FORMAT

第 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的牛奶制造公司的牛奶数量。

SAMPLE INPUT (file milk.in)

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

INPUT EXPLANATION

100 5 – Merry乳业公司想要从五个奶农手中收购100个单位的牛奶
5 20 – 奶农1说,“我可以卖出20个单位,每单位5美分”
9 40 etc.
3 10 – 奶农3说,“我可以出售你10单位每单位3美分“
8 80 etc.
6 30 – 奶农5说,”我可以卖给你30个单位,每单位6美分“

OUTPUT FORMAT

带有单个整数的单行,这是Merry乳业公司必须支付一天牛奶的最低成本。

SAMPLE OUTPUT (file milk.out)

630

设计算法

这道题非常简单,写出来一次就过了。基本上就是先把便宜的收购了,再收购次便宜的,依次下去,贪心算法,快速搞定。

C++编写

/*
ID: your_id_here
TASK: milk
LANG: C++                 
*/
#include<iostream>
#include<algorithm>
using namespace std;

int N,M;
struct farmer{
    int price;
    int unit;
}f[5010];

bool compare(const farmer& a,const farmer& b)
{
    return a.price<b.price;           //按照牛奶单价从小到大的顺序排列
}

void solve()
{
    int sum=0;
    int i=0;
    while(N)
    {
        if(f[i].unit<=N)
        {
            N-=f[i].unit;
            sum+=f[i].price * f[i].unit;
            ++i;
        }
        else
        {
            sum+=N*f[i].price;
            break;
        }
    }
    cout<<sum<<endl;
}

int main()
{
    freopen("milk.in","r",stdin);
    freopen("milk.out","w",stdout);
    cin>>N>>M;
    for(int i=0;i<M;++i)
        cin>>f[i].price>>f[i].unit;
    sort(f,f+M,compare);
    solve();
    return 0;
}
发布了82 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Slatter/article/details/100206363