本题思路就是把输入的月饼的库存和总售价,转换为每吨的单价,在按照每吨单价高的进行排序,先将单价高的卖出去,再卖单价低的这样就可以实现出售额最大了。本题注意除了市场最大需求量时整型用int其他变量得用浮点数。
#include<stdio.h>
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include<algorithm>
#include <vector>
using namespace std;
bool s(pair<double, double>a, pair<double, double>b)
{
if (a.second > b.second) {
return 1;
}
else {
return 0;
}
//return a.second >= b.second;
}
int main() {
int n, number;
int i;
double temp;
double sum=0;
cin >> n >> number;
vector<pair<double, double>>a(n);
for (i = 0;i < n;i++) {
cin >> a[i].first;
}
for (i = 0;i < n;i++) {
cin >> temp;
a[i].second = temp / a[i].first;
}
sort(a.begin(), a.end(), s);
temp = 0;
for (i = 0;i < n;i++) {
temp += a[i].first;
if (temp < number) {
sum = sum + a[i].first * a[i].second;
}
else if (temp>=number){
if (i == 0) {
sum = number * a[i].second;
cout << setiosflags(ios::fixed) << setprecision(2) << sum<<endl;
break;
}
else {
sum = sum + (a[i].first-(temp - number)) * a[i].second;
cout << setiosflags(ios::fixed) << setprecision(2) << sum << endl;
break;
}
}
}
if (temp < number) {
cout << setiosflags(ios::fixed) << setprecision(2) << sum<<endl ;
}
}