本文主要是介绍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;
}
这篇关于Mixing Milk的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!