题目链接:https://www.luogu.com.cn/problem/P1208
解题思路:
本题基于如下贪心思想:
优先选择单价便宜的。
所以我们按照单价从小到大排序,优先选择单价小的就可以解决这个问题了。
示例代码:
#include <bits/stdc++.h>
using namespace std;
struct Milk {
int p, a;
} a[5050];
bool cmp(Milk a, Milk b) {
return a.p < b.p;
}
int n, m;
long long sum;
int main() {
cin >> n >> m;
for (int i = 0; i < m; i ++) cin >> a[i].p >> a[i].a;
sort(a, a+m, cmp);
for (int i = 0; i < m; i ++) {
if (n <= a[i].a) {
sum += (long long) n * a[i].p;
break;
}
sum += (long long) a[i].p * a[i].a;
n -= a[i].a;
}
cout << sum << endl;
return 0;
}