Mixing Milk 混合牛奶 USACO 贪心

1009: 1.3.1 Mixing Milk 混合牛奶

时间限制: 1 Sec  内存限制: 128 MB
提交: 9  解决: 9
[提交] [状态] [讨论版] [命题人:外部导入]

题目描述

1.3.1 Mixing Milk 混合牛奶 

(milk.pas/c/cpp)

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

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

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

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

【怎么又是牛奶。。美国人这么喜欢牛?】 

格式

PROGRAM NAME: milk 

INPUT FORMAT:file milk.in 

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

OUTPUT FORMAT:file milk.out 

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

SAMPLE INPUT

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

SAMPLE OUTPUT

630

提示

来源/分类

USACO终于又来贪心了!。。

天哪这么简单的贪心!

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 struct Node{
 4     int p,a;
 5 }arr[5005];
 6 int cmp(Node a,Node b){
 7     return a.p<b.p;
 8 }
 9 int main(){
10     int n,m;
11     scanf("%d%d",&n,&m);
12     for(int i=1;i<=m;i++)
13         scanf("%d%d",&arr[i].p,&arr[i].a);
14     sort(arr+1,arr+m+1,cmp);
15     int sum=0,tmpv=0;
16     for(int i=1;i<=m;i++)
17         if(sum+arr[i].a<=n)
18             sum+=arr[i].a,tmpv+=arr[i].p*arr[i].a;
19         else{
20             tmpv+=(n-sum)*arr[i].p;
21             break;
22         }
23     cout<<tmpv;
24     return 0;
25 }
原文地址:https://www.cnblogs.com/Tidoblogs/p/11295433.html