题目描述
知识点: 贪心
思路: 每次选取单价最高的月饼先卖即可。对单价月饼进行排序然后依次往后遍历。
坑点: 月饼数量跟价格都可能为double类型。。。。
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int N = 1100;
struct MoonCake{
double s;
double p;
bool operator < (const MoonCake m) const{
return p > m.p;
}
}m[N];
int n;
double d,s[N],p[N];
int main(){
cin>>n>>d;
for(int i = 0;i < n;i++)
cin>>s[i];
for(int i = 0;i < n;i++)
cin>>p[i];
for(int i = 0;i < n;i++){
m[i] = {s[i],p[i]/s[i]};
}
sort(m,m+n);
double res = 0;
for(int i = 0;i < n;i++){
int cur = min(d,m[i].s);
res += cur*m[i].p;
d -= m[i].s;
if(d <= 0) break;
}
printf("%.2lf",res);
return 0;
}