题目:月饼
题意:给出n种月饼的重量和总价,问怎么卖收益最大!
思路:按每种月饼的单价(重量/总价)递增排序,然后依次求在D范围的月饼都卖,最后不足当前月饼总量时按单价*D卖出所有的D即为最大收益!
代码:
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; const int maxn = 1005; struct whole{ double w,v; double pro; }a[maxn]; bool cmp(whole x,whole y){ return x.pro > y.pro; } int main() { int n,d; while(~scanf("%d%d",&n,&d)){ for(int i=0;i<n;i++) scanf("%lf",&a[i].w); for(int i=0;i<n;i++) {scanf("%lf",&a[i].v);a[i].pro = a[i].v/a[i].w;} sort(a,a+n,cmp); double sum = 0; for(int i=0;i<n;i++){ if(d >= a[i].w){ sum += a[i].v; d -= a[i].w; }else{ sum += a[i].pro * d; break; } } printf("%.2lf\n",sum); } return 0; }