由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要。帮助 Marry 乳业找到最优的牛奶采购方案。 Marry 乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格可能相同。此外,就像每头奶牛每天只能挤出固定数量的奶,每位奶农每天能提供的牛奶数量是一定的。每天 Marry 乳业可以从奶农手中采购到小于或者等于奶农最大产量的整数数量的牛奶。 给出 Marry 乳业每天对牛奶的需求量,还有每位奶农提供的牛奶单价和产量。计算采购足够数量的牛奶所需的最小花费。 注:每天所有奶农的总产量大于 Marry 乳业的需求量。 Input 第一行二个整数 � , � n,m,表示需要牛奶的总量,和提供牛奶的农民个数。 接下来 � m 行,每行两个整数 � � , � � p i ,a i ,表示第 � i 个农民牛奶的单价,和农民 � i 一天最多能卖出的牛奶量。用c语言写
时间: 2024-02-13 14:03:59 浏览: 146
usaco第10题
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100000
#define MAX_M 100000
typedef struct {
int price; // 牛奶单价
int amount; // 最多能卖出的牛奶量
} Farmer;
// 比较函数:按牛奶单价从小到大排序
int cmp(const void *a, const void *b) {
return ((Farmer *)a)->price - ((Farmer *)b)->price;
}
int main() {
int n, m;
Farmer farmers[MAX_M];
int i, j, cost = 0, total = 0;
scanf("%d %d", &n, &m);
for (i = 0; i < m; i++) {
scanf("%d %d", &farmers[i].price, &farmers[i].amount);
total += farmers[i].amount; // 统计总产量
}
qsort(farmers, m, sizeof(Farmer), cmp); // 按牛奶单价排序
if (total < n) { // 检查总产量是否小于需求量
printf("Error: total production is insufficient\n");
return 0;
}
for (i = 0; i < m; i++) { // 从单价最低的奶农开始购买
if (n <= 0) break; // 购买足够数量的牛奶就退出循环
if (farmers[i].amount >= n) { // 该奶农的牛奶足够购买
cost += n * farmers[i].price;
break;
} else { // 该奶农的牛奶不足购买,继续购买下一位奶农的牛奶
cost += farmers[i].amount * farmers[i].price;
n -= farmers[i].amount;
}
}
printf("%d\n", cost); // 输出最小花费
return 0;
}
```
阅读全文