很简单的贪心,算出每种月饼的单价,递减排序后,从左往右加
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Mooncake{
double inventory;
double price;
double pricePerTTon;
};
bool cmp(Mooncake a,Mooncake b){
return a.pricePerTTon > b.pricePerTTon;
}
vector<Mooncake> mooncakes;
int main(){
int n,m;
scanf("%d %d",&n,&m);
for(int i = 0;i < n;i++){
Mooncake temp;
scanf("%lf",&temp.inventory);
mooncakes.push_back(temp);
}
for(int i = 0;i < n;i++){
scanf("%lf",&mooncakes[i].price);
mooncakes[i].pricePerTTon = mooncakes[i].price / mooncakes[i].inventory;
}
sort(mooncakes.begin(),mooncakes.end(),cmp);
int i = 0;
double sum = 0;
while(m != 0 && i < n){
if(m >= mooncakes[i].inventory){
sum += mooncakes[i].price;
m = m - mooncakes[i].inventory;
i++;
}else{
sum += m * mooncakes[i].pricePerTTon;
m = 0;
}
}
printf("%.2lf",sum);
system("pause");
return 0;
}