• PAT B1020 月饼(25)


    题目描述
    月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。
    注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,获得 72 + 45/2 = 94.5(亿元)。
    输入格式
    每个输入包含一个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N 表示月饼的种类数、以及不超过 500(以万吨为单位)的正整数 D 表示市场最大需求量。随后一行给出 N 个正数表示每种月饼的库存量(以万吨为单位);最后一行给出 N 个正数表示每种月饼的总售价(以亿元为单位)。数字间以空格分隔。
    输出格式
    对每组测试用例,在一行中输出最大收益,以亿元为单位并精确到小数点后 2 位。
    输入格式

    3 20
    18 15 10
    75 72 45
    

    输出样例

    94.50
    

    全部AC

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    
    using namespace std;
    
    struct MoonCake {
        double cost;   //总售价
        double save;   //库存量
        double per_cost; //万吨单价
    }mooncake[1100];
    
    void calc_per_cost(MoonCake& A){
        A.per_cost = A.cost / A.save;
    }
    bool cmp(MoonCake A, MoonCake B) {
        return A.per_cost > B.per_cost;
    }
    int main() {
        #ifdef ONLINE_JUDGE
        #else
            freopen("1.txt", "r", stdin);
        #endif // ONLINE_JUDGE
        int n; //月饼的种类数
        double m; //市场最大需求数
        scanf("%d %lf", &n, &m);
        //输入各月饼的库存
    //    printf("%d %.2lf
    ", n, m);
        for(int i = 0; i < n; i++) {
            scanf("%lf", &mooncake[i].save);
        }
        //输入各月饼的总售价并计算万吨单价
        for(int i = 0; i < n; i++) {
            scanf("%lf", &mooncake[i].cost);
            calc_per_cost(mooncake[i]);
        }
    //    for(int i = 0; i < n; i++){
    //        printf("cost:%lf  save:%lf per_cost:%.2lf
    ", mooncake[i].cost, mooncake[i].save, mooncake[i].per_cost);
    //    }
        //按照万吨单价从大到小排序
        sort(mooncake, mooncake+n, cmp);
    //    printf("排序后
    ");
    //    for(int i = 0; i < n; i++){
    //        printf("cost:%lf  save:%lf per_cost:%.2lf
    ", mooncake[i].cost, mooncake[i].save, mooncake[i].per_cost);
    //    }
        //计算最大收益
        double shouyi = 0;//最大收益
        if(m < mooncake[0].save) {  //最大需求量小于单价最高月饼的库存
            shouyi = m * mooncake[0].per_cost;
        } else if(m > mooncake[0].save){//最大需求量大于单价最高月饼的库存
            int temp = m;
            int a = 0;//结构体数组下标
            //因为单个库存小于最大需求量,先计算总的在计算剩余小于库存量的。
            while(temp > 0 && temp > mooncake[a].save && a < n) { //a小于n是全部月饼都卖出去了
                shouyi += mooncake[a].cost;
                temp -= mooncake[a].save;
                a++;
            }
            //剩余小于库存量的
            shouyi += temp * mooncake[a].per_cost;
        }
        printf("%.2lf", shouyi);
        return 0;
    }
    
  • 相关阅读:
    project3 blockchain
    RESTful Web服务与“大”Web服务: 做出正确的建筑决策
    project2
    LAB4
    云计算的描述性文献综述与分类研究
    SQL常见面试题(学生表_课程表_成绩表_教师表)
    等价类划分经典实例-三角形测试用例设计
    搜索框功能测试分析
    B/S结构-登录页面-测试用例设计
    软件测试面试--常用基本控件测试用例
  • 原文地址:https://www.cnblogs.com/isChenJY/p/11453186.html
Copyright © 2020-2023  润新知