题目大意:
Marry乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格是不同的。此外,就像每头奶牛每天只能挤出固定数量的奶,每位奶农每天能提供的牛奶数量是一定的。每天Marry乳业可以从奶农手中采购到小于或者等于奶农最大产量的整数数量的牛奶。
给出Marry乳业每天对牛奶的需求量,还有每位奶农提供的牛奶单价和产量。计算采购足够数量的牛奶所需的最小花费。
注:每天所有奶农的总产量大于Marry乳业的需求量。
样例输入:
100 5
5 20
9 40
3 10
8 80
6 30
样例输出:
630
题解:
这是一道典型的贪心问题,优先选择单价低的牛奶就ok了。和杭电OJ上老鼠换大米一毛一样。。
代码:
C++
/*
ID: mujinui1;
PROG: milk
LANG: C++
*/
#include<fstream>
#include<cstring>
using namespace std;
int main(){
ifstream fin("milk.in");
ofstream fout("milk.out");
int need,num;
fin>>need>>num;
double a[5010][3];
for(int i=0;i<num;i++){
fin>>a[i][0]>>a[i][1];
}
for(int i=0;i<num;i++){
for(int j=0;j<num;j++){
int temp;
if(a[i][0]<a[j][0]){
temp=a[i][0];
a[i][0]=a[j][0];
a[j][0]=temp;
temp=a[i][1];
a[i][1]=a[j][1];
a[j][1]=temp;
}
}
}
// for(int i=0;i<num;i++){
// cout<<a[i][0]<<" "<<a[i][1]<<endl;
// }
int money=0,flag=0;
while(need!=0){
if(need>a[flag][1]){
need-=a[flag][1];
money+=a[flag][1]*a[flag][0];
flag++;
}
else{
money+=need*a[flag][0];
break;
}
}
fout<<money<<endl;
return 0;
}