按每种月饼的单价(重量/总价)递增排序,然后依次求在D范围的月饼都卖,最后不足当前月饼总量时按单价*D卖出所有的D即为最大收益!
代码如下
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
struct node
{
double a,b;
double c;
}s[10000];
bool cmp(node a,node b)
{
return a.c>b.c;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%lf",&s[i].a);
for(int i=0;i<n;i++)
scanf("%lf",&s[i].b);
for(int i=0;i<n;i++)
s[i].c=(s[i].b*1.00)/s[i].a;
sort(s,s+n,cmp);
double sum=0.0;
for(int i=0;i<n;i++)
{
if(m<=0)
break;
if(s[i].a<=m)
{
sum+=s[i].b;
m=m-s[i].a;
}
else if(m<s[i].a)
{
sum+=s[i].c*m;
m=0;
}
}
printf("%.2lf\n",sum);
}