题意:牛奶厂从M个奶农那里收购N单位的牛奶,每个奶农有Ai单位的牛奶,单价为Pi。求牛奶厂收购N单位的牛奶的最低总价是多少?
解题思路:
- 读入N,M
- 每次找单价最低的奶农,收购其全部的牛奶,如果已经已收购的牛奶将超过N,则仅收购其一部分奶,使总量达到N
- 在上述过程中统计总价格
代码:
/*
ID: zc.rene1
LANG: C
PROG: milk
*/
#include<stdio.h>
#include<stdlib.h>
int find_min(int arr_p[], int arr_a[], int m){
int i, min, min_i;
min=1001;
for(i=0; i<m; i++){
if(arr_p[i]<=min&&arr_a[i]>0){
min_i=i;
min=arr_p[i];
}
}
return min_i;
}
int main(void){
int n, m, i, total=0;
FILE *fin=fopen("milk.in", "r");
FILE *fout=fopen("milk.out", "w");
fscanf(fin, "%d %d", &n, &m);
int * arr_p=(int *)malloc(m*sizeof(int));
int * arr_a=(int *)malloc(m*sizeof(int));
for(i=0; i<m; i++){
fscanf(fin, "%d %d", &arr_p[i], &arr_a[i]);
}
while(n>0){
i=find_min(arr_p, arr_a, m);
if(n>=arr_a[i]){
n-=arr_a[i];
total+=(arr_p[i]*arr_a[i]);
arr_a[i]=0;
}
else{
total+=(arr_p[i]*n);
arr_a[i]-=n;
n=0;
}
}
fprintf(fout, "%d\n", total);
return 0;
}