zoukankan      html  css  js  c++  java
  • PAT-乙级-1020.月饼(25)

    时间限制
    100 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    CHEN, Yue

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

    注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有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 第一种算法 动态分配内存(c)
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 int main()
     5 {
     6     int N,M;
     7     scanf("%d %d",&N,&M);
     8     //calloc在动态分配完内存后,自动初始化该内存空间为零,
     9     //malloc不初始化,里边数据是随机的垃圾数据。
    10 
    11     //函数原型:void *calloc(size_t n, size_t size);
    12     //功 能: 在内存的动态存储区中分配n个长度为size的连续空间, 函数
    13     //返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。
    14 
    15     double *a=(double *)calloc(N,sizeof(double));//库存
    16     double *b=(double *)calloc(N,sizeof(double));//总价
    17     double *c=(double *)calloc(N,sizeof(double));//单价
    18 
    19     for(int i=0;i<N;i++)
    20     scanf("%lf",&a[i]);
    21 
    22     for(int i=0;i<N;i++)
    23     {
    24         scanf("%lf",&b[i]);
    25         c[i]=b[i]/a[i];
    26     }
    27 
    28     for (int i=0;i<N;i++)
    29     {
    30         for (int j=i; j<N;j++)
    31         {
    32             if (c[i]<c[j])
    33             {
    34                 double temp=c[i];
    35                 c[i]=c[j];
    36                 c[j]=temp;
    37 
    38                 temp=a[i];
    39                 a[i]=a[j];
    40                 a[j]=temp;
    41 
    42                 temp=b[i];
    43                 b[i]=b[j];
    44                 b[j]=temp;
    45             }
    46         }
    47     }
    48 
    49     double demand=0;
    50     double sum_price=0;
    51     int i;
    52 
    53     for(i=0;i<N;i++)
    54     {
    55         demand += a[i];
    56         if(demand >= M)
    57         {
    58             sum_price += ((a[i]-demand+M) *c[i]);
    59             printf("%.2lf
    ",sum_price);
    60             break;
    61         }
    62         else
    63         {
    64             sum_price += b[i];
    65         }
    66     }
    67 
    68     if(i>=N)    printf("%.2lf
    ",sum_price);
    69 
    70     return 0;
    71 }

     2  第二种算法 用结构体(c++)  考虑到c++的sort函数比较方便使用

     1 #include <stdio.h>
     2 #include <algorithm>
     3 #include <stdbool.h>
     4 
     5 using namespace std;
     6 
     7 struct mooncake
     8 {
     9     double store;    //库存量
    10     double sell;    //总价
    11     double price;    //单价
    12 }a[1010];
    13 
    14 bool cmp(mooncake a, mooncake b)
    15 {
    16     return a.price > b.price;
    17 }
    18 
    19 int main()
    20 {
    21     int n;
    22     double  demand;
    23     scanf("%d%lf",&n,&demand);
    24     for(int i =0; i < n; i++)
    25     {
    26         scanf("%lf",&a[i].store);
    27     }
    28     for(int i = 0; i < n; i++)
    29     {
    30         scanf("%lf",&a[i].sell);
    31         a[i].price = a[i].sell / a[i].store;
    32     }
    33 
    34     sort(a, a+n, cmp);  //按照cmp的要求进行排序
    35     double ans = 0;
    36     for(int i=0; i < n; i++)
    37     {
    38         if(a[i].store < demand)
    39         {
    40             demand -= a[i].store;
    41             ans += a[i].sell;
    42         }
    43         else
    44         {
    45             ans += demand * a[i].price;
    46             break;
    47         }
    48     }
    49     printf("%.2f
    ",ans);
    50     return 0;
    51 
    52 }
  • 相关阅读:
    二维数组
    ASCII_02_扩展
    ASCII_01
    【转】如何监控某个驱动器或目录及其下面的所有子目录的创建文件的动作
    webpack+vue2.0项目 (一) vue-cli脚手架
    分享两个常用的rem布局方式
    移动端border:1px问题解决方案
    sticky footer 布局
    用js数组实现最原始的图片轮播实现
    分享按钮(QQ,微信,微博等)移入动画效果
  • 原文地址:https://www.cnblogs.com/leezheng/p/8947162.html
Copyright © 2011-2022 走看看