PAT乙级刷题之路1020 月饼 (25分)

1020 月饼 (25分)

根据题目中:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,获得 72 + 45/2 = 94.5(亿元)。
就是在隐晦的告诉你优先卖单价高的!!!

代码:

#include
#include
#include
#include
#include
using namespace std;
struct mooncake      //用结构体可以方便对单价排序,分开定义数组会打乱顺序
{
     //都有可能是小数
    double knum;//月饼库存量      
    double pnum;//月饼总售价
    double anum;//单价
};
bool cmp(mooncake a,mooncake b)
{
     
    return a.anum>b.anum;
}
int main()
{
     
    int N,D;
    cin>>N>>D;
    mooncake mk[1001];
    for(int i=0;i<N;i++)
        cin>>mk[i].knum;
    for(int i=0;i<N;i++)
        cin>>mk[i].pnum;
    for(int i=0;i<N;i++)
        mk[i].anum=mk[i].pnum/mk[i].knum;
    sort(mk,mk+N,cmp);//对单价排序

    int i=0;
    double sum=0;
    while(D!=0){
     
        if(D<=mk[i].knum){
     
            sum+=mk[i].anum*D;
            D=0;
        }else{
     
            sum+=mk[i].pnum;
            D-=mk[i].knum;
        }
        i++;
    }
    printf("%.2f",sum);     //输出带格式,使用printf更方便
}

你可能感兴趣的:(PAT乙级甲级大全,算法,c++)