zoukankan      html  css  js  c++  java
  • PAT (Basic Level) Practise (中文)-1020. 月饼 (25)

    http://www.patest.cn/contests/pat-b-practise/1020

    月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。

    注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有3种月饼,其库存量分别为18、15、10万吨,总售价分别为75、72、45亿元。如果市场的最大需求量只有20万吨,那么我们最大收益策略应该是卖出全部15万吨第2种月饼、以及5万吨第3种月饼,获得 72 + 45/2 = 94.5(亿元)。

    输入格式:

    每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N表示月饼的种类数、以及不超过500(以万吨为单位)的正整数D表示市场最大需求量。随后一行给出N个正数表示每种月饼的库存量(以万吨为单位);最后一行给出N个正数表示每种月饼的总售价(以亿元为单位)。数字间以空格分隔。

    输出格式:

    对每组测试用例,在一行中输出最大收益,以亿元为单位并精确到小数点后2位。

    输入样例:

    3 20
    18 15 10
    75 72 45
    

    输出样例:

    94.50



     1 #include<cstdio>
     2 
     3 int n=0;//不超过1000的正整数N表示月饼的种类数
     4 double d=0;//超过500(以万吨为单位)的正整数D表示市场最大需求量
     5 double yuebing[1000][2]={0};//每种月饼的库存量(以万吨为单位)、每种月饼的单价
     6 
     7 void sort()
     8 {   
     9     double kucun=0.0,jiage=0.0;
    10     for(int i=0;i<n;i++)
    11         for(int j=0;j<n-i-1;j++)
    12             if(yuebing[j][1]<yuebing[j+1][1])
    13             {
    14                 kucun=yuebing[j][0];
    15                 jiage=yuebing[j][1];
    16                 
    17                 yuebing[j][0]=yuebing[j+1][0];
    18                 yuebing[j][1]=yuebing[j+1][1];
    19                 yuebing[j+1][0]=kucun;
    20                 yuebing[j+1][1]=jiage;
    21             }
    22 }
    23 double getMax()
    24 {  
    25     double max=0.0;
    26     int i=0;
    27     while(i<n&&d>0)  
    28     {
    29         if(d>=yuebing[i][0]) max+=yuebing[i][0]*yuebing[i][1],d-=yuebing[i][0];  
    30         else max+=d*yuebing[i][1],d=0; 
    31         i++;
    32     }
    33     return max;
    34 }
    35 
    36 int main()
    37 {
    38     scanf("%d%lf",&n,&d);    
    39     for(int i=0;i<n;i++) scanf("%lf",&yuebing[i][0]);   
    40           
    41     double zongjia=0.0;
    42     for(int i=0;i<n;i++) scanf("%lf",&zongjia),yuebing[i][1]=zongjia/yuebing[i][0];
    43     
    44     sort(); //按单价排序,数据量小,简单排序即可   
    45     printf("%.2f",getMax());//最大收益 即 卖出去的是最贵的 
    46     return 0;
    47 }
  • 相关阅读:
    二进制,八进制,十六进制,十进制之间的换算
    14简化路径(71)
    13字符串解码(394)
    12 反转每对括号间的子串(1190)
    11 使括号有效的最少添加(921)
    10 K 个一组翻转链表(25)
    9 从链表中删去总和值为零的连续节点(1171)
    8 链表中的下一个更大节点(1019)
    7两两交换链表中的节点(24)
    6 奇偶链表(
  • 原文地址:https://www.cnblogs.com/asinlzm/p/4463404.html
Copyright © 2011-2022 走看看