前言
正文
参考题解
#include<iostream>
#include<algorithm>
using namespace std;
/* 给出n种不同月饼的库存量以及总售价,市场需求量d,求最大利润。 显然在要卖出总需求量为d的月饼,同时要获得最大利润的条件下,策略的选择 应该是每次先优先卖出单价高的月饼,直到卖出量等于总需求量d 思路: 1、首先定义月饼的结构体,根据题意可知其应该包含月饼的库存,总利润以及单个月饼的利润, 读入数据到结构体数组中 2、按照单个月饼的利润将数组排序,循环遍历数组,每次比较当前种类月饼的库存inventory和当前需求d的大小 若inventory小于d,则d-=inventory,并且res+=profit;否则res+=d*price,结束。 */
const int N=1e3+10;
struct Cake{
double inventory;
double profit;
double price;
}cake[N];
int n,d;
bool cmp(Cake a,Cake b){
return a.price>b.price;
}
int main(){
cin>>n>>d;
for(int i=0;i<n;i++)cin>>cake[i].inventory;
for(int i=0;i<n;i++){
cin>>cake[i].profit;
cake[i].price=cake[i].profit/cake[i].inventory;
}
sort(cake,cake+n,cmp);
double res=0;
for(int i=0;i<n;i++){
if(cake[i].inventory<d){
res+=cake[i].profit;
d-=cake[i].inventory;
}else{
res+=cake[i].price*d;
break;
}
}
printf("%.2f\n",res);
return 0;
}