美文网首页
1020 月饼 (25分)

1020 月饼 (25分)

作者: km15 | 来源:发表于2020-01-31 11:55 被阅读0次

    考察:结构体排序+贪心策略+从单价高进行枚举要会的!

    /*
    题意:
    1、给出库存量,总售价,(有好几种),市场需求量
    求出策略赚最多钱——贪心策略
    种类不超过1000,不超过500万吨

    编程思想:
    1、应该先开两个数组,输出库存量,总售价,计算出单价,
    2、这时候应该判断了,如果当前最多钱的能够覆盖住掉需求量,就覆盖掉并且清除掉覆盖量
    如果不能,则money累加,减去库存量,累加下一个,
    也有可能3个都累加

    learn && wrong:
    1、如何削减库存量呢->枚举,加到利润上去,减去库存量,需求没有库存量多,直接成单价break出来
    2、它是结构来的,所以排列就按单价来排列,不像我,没法排列
    3、库存量和总售价记得是double,利润记得也是double
    4、总需求也要是double!因为后面会减去库存量,
    总结:记住这类实际问题,可能需要double
    */

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    const int maxn = 1010;
    struct mooncake {
        double price;  //单价  //单价,这三个也必须是double
        double sell;  //总售价
        double store; //坤存量
    }cake[maxn];
    
    bool cmp(mooncake a, mooncake b) {
        return a.price > b.price;
    }
    
    int main(int argc, char** argv) {
        int zhognlei;double xuqiu;  //需求也必须是double
        cin >> zhognlei >> xuqiu;
        for (int i = 0;i < zhognlei;++i) {
            cin >> cake[i].store;
        }
        
        for (int i = 0;i < zhognlei;++i) {
            cin >> cake[i].sell;
            cake[i].price = cake[i].sell / cake[i].store;
        }
    
        sort(cake, cake + zhognlei, cmp);
    
        double lirun = 0;
        for (int i = 0;i < zhognlei;++i) {
            if (cake[i].store <= xuqiu) { 
                lirun += cake[i].sell;
                xuqiu -= cake[i].store;
            }
            else {
                lirun += cake[i].price * xuqiu; //(!!!)还库存减需求,直接乘需求啊!
                break;
            }
        }
    
        printf("%.2lf\n",lirun);
        return 0;
    }

    相关文章

      网友评论

          本文标题:1020 月饼 (25分)

          本文链接:https://www.haomeiwen.com/subject/jexwthtx.html