目录
1556. 月饼
月饼是中国的一种烘焙食品,是在中秋节期间食用的传统美食。
月饼的种类多种多样,不同的月饼可能会有不同的表皮和馅料。
现在,考虑到各种月饼的库存量和价格,以及市场对月饼的总需求量,请你计算出可以赚到的最大利润。
例如,共有 33 种月饼,存量分别为 180,150,100180,150,100(单位:千吨),总价值分别为 7.5,7.2,4.57.5,7.2,4.5 (单位:十亿元),市场总需求量为 200200,那么最佳销售方案是出售第二种月饼 150150,第三种月饼 5050,这样可获最大利润:7.2+4.5/2=9.457.2+4.5/2=9.45。
输入格式
第一行包含两个整数 NN 和 DD,分别表示月饼种类以及月饼总需求量。
第二行包含 NN 个正数,表示每种月饼的存量。
第三行包含 NN 个正数,表示每种月饼的总价值。
输出格式
输出一个数,表示最大利润,保留两位小数。
数据范围
1≤N≤10001≤N≤1000,
1≤D≤5001≤D≤500,
每种月饼的存量不超过 200200, 总价值不超过 20002000。
输入样例:
3 200
180 150 100
7.5 7.2 4.5
输出样例:
9.45
难度:简单 |
时/空限制:0.15s / 64MB |
总通过数:724 |
总尝试数:1782 |
来源: |
算法标签 |
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct mooncake{
double store;//库存
double sell;//总售价
double prize;//单价
}cake[1001];
bool cmp(mooncake a,mooncake b){
return a.prize>b.prize;
}
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].prize=cake[i].sell/cake[i].store;
}
sort(cake,cake+n,cmp); //单价从高到低
double ans=0.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].prize*D; //只卖出剩余需求量的月饼
break;
}
}
printf("%.2f\n", ans);
return 0;
}