• 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 }
  • 相关阅读:
    最牛B的编码套路
    CRM运维工程师主要职责
    SQL ROUND函数用法
    VMware不能完全卸载问题
    如何建立真正支持业务的高效运维体系?
    【TensorFlow】tf.nn.softmax_cross_entropy_with_logits的用法
    L1正则化与L2正则化详解及解决过拟合的方法
    TensorFlow学习笔记之--[tf.clip_by_global_norm,tf.clip_by_value,tf.clip_by_norm等的区别]
    TensorFlow学习笔记之--[compute_gradients和apply_gradients原理浅析]
    Windows10+Tensorflow1.12-gpu+CUDA+cudnn+Anaconda3.5+Pycharm3.5 离线GPU开发环境搭建
  • 原文地址:https://www.cnblogs.com/leezheng/p/8947162.html
Copyright © 2020-2023  润新知