zoukankan      html  css  js  c++  java
  • 1020 月饼 (25分)

    1. 这里采用“总是选择单价最高的月饼出售,可以获得最大的利润”的策略。因此,对每种月饼,都根据其库存量和总售价来计算出该种月饼的单价。之后,将所有月饼按单价从高到低排序。
    2. 从单价高的月饼开始枚举。
      1. 如果该种月饼的库存量不足以填补所有需求量,则将该种月饼全部卖出,此时需求量减少该种月饼的库存量大小,收益值增加该种月饼的总售价大小。
      2. 如果该种月饼的库存量足够供应需求量,则只提供需求量大小的月饼,此时收益值增加当前需求量乘以该种月饼的单价,而需求量减为0。这样,最后得到的收益值即为所求的最大收益值。

    策略正确性的证明:假设有两种单价不同的月饼,其单价分别为a和b (a<b)。如果当前需求量为K,那么两种月饼的总收入分别为aK与bK,而aK < bK显然成立,因此需要出售单价更高的月饼。

    ps:月饼库存量和总售价可以是浮点数(题目中只说是正数,没说是正整数),需要用double型存储。对于,总需求量D虽然题目说是正整数,但是为了后面计算方便,也需要定义为浮点型。

    const int N=1010;
    PDD a[N];
    int n;
    double m;
    
    bool cmp(PDD &a,PDD &b)
    {
        return a.se/a.fi > b.se/b.fi;
    }
    
    int main()
    {
        cin>>n>>m;
    
        for(int i=0;i<n;i++) cin>>a[i].fi;
        for(int i=0;i<n;i++) cin>>a[i].se;
    
        sort(a,a+n,cmp);
    
        double res=0;
        for(int i=0;i<n;i++)
        {
    
            if(m >= a[i].fi) res+=a[i].se, m-=a[i].fi;
            else 
            {
                res+=a[i].se/a[i].fi*m, m=0;
                break;
            }
        }
    
        printf("%.2f
    ",res);
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    请求接口时params和data的区别
    深拷贝
    react学习笔记---父子组件间值得传递
    表单验证自定义二选一
    vue数据复杂时的表单验证
    jq获取路径参数的方法
    删除对象中的元素的方法
    iOS的URL处理
    cocoapod的下载安装解释
    初探博客园
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14337717.html
Copyright © 2011-2022 走看看