简单的贪心,注意数量也可能为小数。
AC代码:
#include<iostream>
#include<map>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#include<list>
#include<set>
#include<stack>
#include<cmath>
#include<vector>
#define inf -100000000
using namespace std;
struct node
{
double num;
double price;
double val;
};
node a[1005];
bool cmp(node x,node y)
{
return x.val>y.val;
}
int main()
{
int n;
double d;
scanf("%d %lf",&n,&d);
for(int i=0;i<n;i++)
{
scanf("%lf",&a[i].num);
}
for(int i=0;i<n;i++)
{
scanf("%lf",&a[i].price);
a[i].val=a[i].price/a[i].num;
}
sort(a,a+n,cmp);
double ans=0;
for(int i=0;i<n;i++)
{
if(d>=a[i].num)
{
ans+=a[i].price;
d-=a[i].num;
}
else
{
ans+=d*a[i].val;
break;
}
}
printf("%.2lf",ans);
}