原题链接:
https://pintia.cn/problem-sets/994805342720868352/exam/problems/type/7?problemSetProblemId=994805399578853376&page=0
代码:
#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
#include <iomanip>
using namespace std;
#define endl '\n'
int N, D;
double inventory[1000], price[1000];
vector<pair<int, double> > perProfit;
bool cmp(pair<int, double>& a, pair<int, double>& b) {
return a.second > b.second;
}
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> N >> D;
for (int i = 0; i < N; i++) {
cin >> inventory[i];
}
for (int i = 0; i < N; i++) {
cin >> price[i];
perProfit.emplace_back(make_pair(i, price[i] / inventory[i]));
}
sort(perProfit.begin(), perProfit.end(), cmp);
int sold = 0;
double profit = 0;
for (int i = 0; i < N; i++) {
if (sold + inventory[perProfit[i].first] <= D) {
profit += price[perProfit[i].first];
sold += inventory[perProfit[i].first];
}
else {
profit += (D - sold) * perProfit[i].second;
sold = D;
break;
}
}
cout << fixed << setprecision(2) << profit;
return 0;
}