您的位置:首页 > 其它

PAT-B 1020. 月饼 (25)

2017-03-10 21:32 183 查看
题目链接在此

思路

使用“总是选择单价最高的月饼出售”这一策略可以使得收益最大。

首先,根据输入,得到每种月饼的单价,然后按照单价从高到低对月饼排序。

然后枚举每种月饼,当总需求量大于等于该种月饼的库存的时候,总需求量减去该月饼的库存量,所获得的利润加上该月饼总价;当总需求量小鱼该种月饼的库存的时候,之取需求量大小的月饼量,此时需求量减为0,利润加上需求量乘以该种月饼单价。

#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;

struct INFO{
double stock; //库存
double whole; //总售价
double price; //单价
}cake[1010];

bool cmp(INFO a, INFO b){
return a.price > b.price;
}

int main(){

int N;
double D;
scanf("%d %lf",&N,&D);

double temp;
for(int i = 0; i < N; i++){
scanf("%lf ",&temp);
cake[i].stock = temp;
}

for(int i = 0; i < N; i++){
scanf("%lf", &temp);
cake[i].whole = temp;
cake[i].price = cake[i].whole / cake[i].stock; //计算单价
}

//根据单价从高到低排序
sort(cake,cake+N,cmp);

double w = 0.0; //总盈利
double sum = 0; //卖出数量
for(int i = 0; i < N; i++){
if(cake[i].stock+sum <= D){ //可以把i月饼都卖掉
w += cake[i].whole;
sum += cake[i].stock;
}else{ //只能卖掉i月饼的一部分
double need = D-sum;
w += need * cake[i].price;
break;
}
}

printf("%.2f\n",w);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: