PAT-B 1020. 月饼 (25)
2017-03-10 21:32
183 查看
题目链接在此。
首先,根据输入,得到每种月饼的单价,然后按照单价从高到低对月饼排序。
然后枚举每种月饼,当总需求量大于等于该种月饼的库存的时候,总需求量减去该月饼的库存量,所获得的利润加上该月饼总价;当总需求量小鱼该种月饼的库存的时候,之取需求量大小的月饼量,此时需求量减为0,利润加上需求量乘以该种月饼单价。
思路
使用“总是选择单价最高的月饼出售”这一策略可以使得收益最大。首先,根据输入,得到每种月饼的单价,然后按照单价从高到低对月饼排序。
然后枚举每种月饼,当总需求量大于等于该种月饼的库存的时候,总需求量减去该月饼的库存量,所获得的利润加上该月饼总价;当总需求量小鱼该种月饼的库存的时候,之取需求量大小的月饼量,此时需求量减为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; }
相关文章推荐
- PAT 1020. 月饼 (25)
- PAT 1020. 月饼 (25)
- PAT乙级 1020. 月饼 (25)(只得到23分)
- 1020. 月饼 (25) PAT
- PAT(B)1020. 月饼 (25)
- 乙级 PAT 1020. 月饼 (25)
- PAT 乙级 1020.月饼(25)
- 浙江大学PAT_乙级_1020. 月饼 (25)
- PAT Basic Level 1020. 月饼(25)
- PAT-B 1020. 月饼 (25)
- pat 乙级 1020 吃月饼(25)
- PAT(Python)-1020:月饼(25)
- PAT (Basic Level) Practise (中文)1020. 月饼 (25)
- PAT-乙级-1020. 月饼 (25)
- 1020. 月饼 (25)-PAT乙级真题
- 1020. 月饼 (25)--PAT乙级
- PAT1020月饼 (25)
- PAT BASIC LEVEL 1020. 月饼 (25)
- PAT (Basic Level) Practise (中文)1020. 月饼 (25) C语言
- 1020. 月饼 (25) PAT乙级真题