贪心:

#include <cstdion>
#include <algorithm>
using namespace std;
struct mooncake{
    double store;   //库存量
    double sell;    //总售价
    double price;   //单价
}cake[1010];
bool cmp(mooncake a,mooncake b){    //按单价从高到低排序
    return a.price>b.price;
}
int main(){
    int n;
    double D;
    scanf("%d%lf",%n,%D);
    for(int i=0;i<n;i++){
        scanf("%lf",&cake[i].store);
    }
    for(int i=0;i<n;i++){
        scanf("%lf",&cake[i].sell);
        cake[i].price=cake[i].sell/cake[i].store;   //计算单价

    }

    sort(cake,cake+n,cmp);  //按单价从高到低排序
    double ans=0;   //收益
    for(int i=0;i<n;i++){
        if(cake[i].store<=D){   //如果需求量高于月饼库存量
            D-=cake[i].store;      //第i种月饼全部卖出
            ans+=cake[i].sell;
        }else{
            ans+=cake[i].price*D    //只卖出剩余需求量的月饼
            break;
        }
    }
    printf("%.2f\n",ans);
    return 0;
}

贪心

12-27 20:35