学习C++从娃娃抓起!记录下洛谷C++学习和备考过程中的题目,记录每一个瞬间。
附上汇总贴:洛谷刷题C++语言 | 汇总_热爱编程的通信人的博客-CSDN博客
【题目描述】
由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要。帮助 Marry 乳业找到最优的牛奶采购方案。
Marry 乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格可能相同。此外,就像每头奶牛每天只能挤出固定数量的奶,每位奶农每天能提供的牛奶数量是一定的。每天 Marry 乳业可以从奶农手中采购到小于或者等于奶农最大产量的整数数量的牛奶。
给出 Marry 乳业每天对牛奶的需求量,还有每位奶农提供的牛奶单价和产量。计算采购足够数量的牛奶所需的最小花费。
注:每天所有奶农的总产量大于 Marry 乳业的需求量。
【输入】
第一行二个整数 n,m,表示需要牛奶的总量,和提供牛奶的农民个数。
接下来 m 行,每行两个整数 pi,ai,表示第 i 个农民牛奶的单价,和农民 i 一天最多能卖出的牛奶量。
【输出】
单独的一行包含单独的一个整数,表示 Marry 的牛奶制造公司拿到所需的牛奶所要的最小费用。
【输入样例】
100 5
5 20
9 40
3 10
8 80
6 30
【输出样例】
630
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int n, m, ans=0;
struct milk {
int p, m;
}a[5005];
bool cmp (milk x, milk y)
{
return x.p<y.p;
}
int main()
{
cin >> n >> m;
for (int i=1; i<=m; i++) {
cin >> a[i].p >> a[i].m;
}
sort(a+1, a+m+1, cmp);
for (int i=1; i<=m; i++) {
if (n>=a[i].m) {
ans += a[i].p * a[i].m;
n -= a[i].m;
} else {
ans += a[i].p * n;
break;
}
}
cout << ans << endl;
return 0;
}
【运行结果】
100 5
5 20
9 40
3 10
8 80
6 30
630