当前位置: 首页 > article >正文

【练习】PAT 乙 1020 月饼

题目

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

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

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

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

输入样例:
3 20 18 15 10 75 72 45

输出样例:
94.50

来源:PAT 乙 1020 月饼


思路(注意事项)

测试点3:漏掉了一种可能的情况→如果所有月饼的总量都不能满足需求量,则最大利润就是所有月饼的总售价。


题解

#include<bits/stdc++.h>
using namespace std;

// 定义月饼结构体
struct yuebing
{
    float k, s, d;   // k 库存量  s 总售价  d 单价
};

// 比较函数:按单价从高到低排序
bool comp(yuebing a, yuebing b)
{
    return a.d > b.d;
}

int main()
{
    int z, x; // z: 种类,x: 需求量
    cin >> z >> x; // 输入月饼种类数和需求量

    // 定义月饼数组
    vector<yuebing> y(z);

    // 输入每种月饼的库存量
    for (int i = 0; i < z; i++) cin >> y[i].k;

    // 输入每种月饼的总售价
    for (int i = 0; i < z; i++) cin >> y[i].s;

    // 计算每种月饼的单价
    for (int i = 0; i < z; i++) y[i].d = y[i].s / y[i].k;

    // 按单价从高到低排序
    sort(y.begin(), y.end(), comp);

    float sum = 0; // 最大收益
    int i = 0;     // 当前处理的月饼索引

    // 循环选择月饼,直到满足需求量 x
    while (x != 0)
    {
        // 如果当前月饼的库存量 <= 需求量
        if (x >= y[i].k)
        {
            sum += y[i].s; // 将当前月饼的总售价加入收益
            x -= y[i].k;   // 减少需求量
        }
        // 如果当前月饼的库存量 > 需求量
        else
        {
            sum += x * y[i].d; // 按需求量 x 计算部分售价
            break;             // 结束循环
        }

        // 移动到下一个月饼
        if (i < z - 1)
            i++;
        else
            break; // 如果所有月饼都已处理,结束循环
    }

    // 输出最大收益,保留两位小数
    printf("%.2f", sum);

    return 0;
}

http://www.kler.cn/a/519809.html

相关文章:

  • Linux——网络基础(1)
  • PyCharm接入DeepSeek实现AI编程
  • ui-automator定位官网文档下载及使用
  • 【Linux】IPC:匿名管道、命名管道、共享内存
  • aws(学习笔记第二十六课) 使用AWS Elastic Beanstalk
  • npm启动前端项目时报错(vue) error:0308010C:digital envelope routines::unsupported
  • 单片机基础模块学习——数码管(二)
  • 微信阅读网站小程序的设计与实现(LW+源码+讲解)
  • OLMo:开启AI研究新纪元的开放利器
  • 基于java线程池和EasyExcel实现异步导出
  • 如何使用Java爬虫获取AliExpress商品详情:代码示例与实践指南
  • python爬虫框架Scrapy简介
  • C#牵手Blazor,解锁跨平台Web应用开发新姿势
  • 机器人学习的范式转变:从专用走向通用基础模型
  • C# 中使用Hash用于密码加密
  • AI Agent的多轮对话:提升用户体验的关键技巧
  • Linux之Tcp粘包笔记
  • Oracle之Merge into函数使用
  • 蓝桥杯LQ1044 求完数
  • 不同路径(62)
  • 机器学习 ---逻辑回归
  • 手撕B-树
  • python学opencv|读取图像(四十五)增加掩模:使用cv2.bitwise_and()函数实现图像按位与运算
  • 修改 Go 版本后不生效?深入排查与解决方案
  • 代码随想录刷题day16|(哈希表篇)349.两个数组的交集
  • LeetCode hot 热题100 二叉树的层序遍历