文章
6
粉丝
43
获赞
41
访问
4.4k
第一眼还以为是背包问题的dp呢,没想到还是个挺简单的贪心。
我们可以想想,一元可以买每种饮料多少?我们是不是每次要拿钱少,量还大的饮料?
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main() {
int n, x;
cin >> x >> n;
while (n != -1 && x != -1) {
double drink = 0, value = 0, ans = 0;
vector<pair<double, double>> arr;
for (int i = 0; i < n; i++) {
cin >> drink >> value;
arr.emplace_back(drink / value, value);
}
sort(arr.begin(), arr.end(), greater<pair<double, double>>());
for (auto& p : arr) {
if (x >= p.second) {
x -= p.second;
ans += p.first * p.second;
}
else {
ans += p.first * x;
break;
}
}
printf("%.3lf\n", ans);
cin >> x >> n;
}
...
登录后发布评论
暂无评论,来抢沙发