您的位置:首页 > 其它

1020. 月饼

2018-02-27 11:38 295 查看

题目截图:

 

思路:

  贪心算法。按照单价从高往低遍历即可。详解请看另一篇博客

 

代码:

1 /*
2     1020. 月饼
3 */
4
5 #include <stdio.h>
6 #include <string.h>
7 #include <math.h>
8 #include <stdlib.h>
9 #include <time.h>
10
11 typedef struct {    // 月饼
12     double store;    // 库存
13     double sell;    // 总售价
14     double price;    // 单价
15 } mooncake;
16 mooncake cake[1010];
17 int cmp(const void* a, const void* b) {    // 按单价从大到小排列
18     mooncake* c = (mooncake*)a;
19     mooncake* d = (mooncake*)b;
20     return d->price > c->price ? 1 : -1;
21 }
22
23 int main() {
24     int n, d, i;    // n 月饼总类数,d 市场最大需求量
25     double sum = 0.0f;    // sum 最大收益
26     scanf("%d %d", &n, &d);
27     for(i=0; i<n; ++i) {    // 输入库存量
28         scanf("%lf", &cake[i].store);
29     }
30     for(i=0; i<n; ++i) {    // 输入总售价
31         scanf("%lf", &cake[i].sell);
32     }
33     for(i=0; i<n; ++i) {    // 计算单价
34         cake[i].price = cake[i].sell/cake[i].store;
35     }
36     qsort(cake, n, sizeof(mooncake), cmp);    // 按照单价排序
37     for(i=0; i<n; ++i) {
38         if(cake[i].store <= d) {    // 需求量高于库存
39             sum += cake[i].sell;
40             d -= cake[i].store;        // 全部卖出
41         } else if(cake[i].store > d) {    // 需求量低于库存
42             sum += cake[i].sell/(cake[i].store/d);    // 部分卖出
43             break;
44         }
45     }
46     printf("%.2f\n", sum);        // 输出2位小数
47
48     return 0;
49 }

 

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