题目描述
思路:
注意给出的是总价,算出单价后先卖单价最高的即可,另外注意都要用double
代码:
#include <bits/stdc++.h>
using namespace std;
struct Mcake{
double inv, pri, pp;//库存,总价,单价
};
Mcake mc[1010];
int cmp(Mcake a, Mcake b){
return a.pp>b.pp;
}
int main()
{
int n;
double d;
cin>>n>>d;
for(int i=0;i<n;i++) cin>>mc[i].inv;
for(int i=0;i<n;i++) cin>>mc[i].pri;
for(int i=0;i<n;i++) mc[i].pp = mc[i].pri/mc[i].inv;
sort(mc, mc+n, cmp);
double pro = 0;
int idx=0;
while(d>0&&idx<n){//别忘了idx<n,因为可能总库存也不够需求量
if(mc[idx].inv<=d){
d -= mc[idx].inv;
pro += mc[idx].pri;
}else{
pro += mc[idx].pp*d;
d = 0;
}
idx++;
}
printf("%.2f\n",pro);
return 0;
}