南狂小子 2024-07-25 15:51 采纳率: 88.9%
浏览 1
已结题

1628: 【入门】购买贺年卡

1628: 【入门】购买贺年卡
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:外部导入
提交:76
解决:59
题目描述
新年快到了,笑笑打算给他的好朋友们发贺年卡,而且他已经选好了自己要购买的贺卡的样式。俗话说得好,货比三家,笑笑来到商店,看了各个商铺这种贺卡的价钱。不仅如此,笑笑还记住了每个商铺的存货量。已知笑笑打算购买m张贺卡,问他最少花多少钱。

输入
第一行两个整数m和n。其中m表示要购买的贺卡的数量,n 表示商铺的个数。
以下n行,每行两个整数,分别表示该商铺这种贺卡的单价和存货量。
输出
仅一个数,表示笑笑花的最少钱数。

样例输入 复制
10 4
4 3
6 2
8 10
3 6
样例输出 复制
36
提示
数据规模:0<m,n<=1000,每个商铺贺卡单价在1100之间,数量在11000之间,输入保证商铺的总存货量不少于m。

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-07-25 15:51
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    问题描述

    笑笑想要购买贺年卡,他需要购买 m 张贺年卡,并从 n 个商店中选择。每个商店有其贺年卡的单价和存货量。笑笑的目标是找到购买这些贺年卡的最少花费。

    输入格式

    • 第一行包含两个整数 mn,分别表示要购买的贺年卡数量和商店的数量。
    • 接下来的 n 行,每行包含两个整数,分别表示该商店的贺年卡单价和存货量。

    输出格式

    • 输出一个整数,表示笑笑购买贺年卡的最少花费。

    算法思路

    1. 读取输入:读取 mn,然后读取每个商店的单价和存货量。
    2. 存储商店信息:使用一个结构体数组或二维数组存储每个商店的单价和存货量。
    3. 排序:根据单价对商店进行排序,确保先考虑价格最低的商店。
    4. 计算最少花费:从价格最低的商店开始,尽可能多地购买贺年卡,直到达到所需的数量 m
    5. 输出结果:输出总花费。

    示例代码

    #include <iostream>
    #include <vector>
    #include <algorithm> // 用于排序
    
    using namespace std;
    
    // 定义商店的结构体
    struct Shop {
        int price; // 单价
        int stock; // 存货量
    };
    
    int main() {
        int m, n;
        cin >> m >> n; // 读取贺年卡数量和商店数量
    
        vector<Shop> shops(n); // 创建商店数组
    
        // 读取每个商店的信息
        for (int i = 0; i < n; ++i) {
            cin >> shops[i].price >> shops[i].stock;
        }
    
        // 根据单价对商店进行排序
        sort(shops.begin(), shops.end(), [](const Shop& a, const Shop& b) {
            return a.price < b.price;
        });
    
        int totalCost = 0; // 初始化总花费
        int cardsLeft = m; // 剩余需要购买的贺年卡数量
    
        // 遍历商店,计算总花费
        for (const auto& shop : shops) {
            if (cardsLeft <= shop.stock) {
                totalCost += shop.price * cardsLeft; // 购买剩余的贺年卡
                break; // 已经购买完毕,退出循环
            } else {
                totalCost += shop.price * shop.stock; // 购买当前商店的所有存货
                cardsLeft -= shop.stock; // 更新剩余需要购买的贺年卡数量
            }
        }
    
        cout << totalCost << endl; // 输出总花费
    
        return 0;
    }
    

    示例输入和输出

    示例输入

    10 4
    4 3
    6 2
    8 10
    3 6
    

    示例输出

    36
    

    解释

    1. 笑笑首先在价格为3的商店购买了6张贺年卡,花费了 3 * 6 = 18
    2. 然后他在价格为4的商店购买了剩下的4张,花费了 4 * 4 = 16
    3. 总花费为 18 + 16 = 36

    注意事项

    • 确保输入数据的格式正确。
    • 在实际应用中,可能需要添加额外的错误检查和输入验证。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月27日
  • 已采纳回答 7月25日
  • 创建了问题 7月25日

悬赏问题

  • ¥15 有关类的报错,在模块里调用另一个模块的方法下的变量时出错
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格
  • ¥15 kali linux用wget archive.kali.org/archive-key.asc指令下载签名无效(失败)
  • ¥15 openHarmony 利用c++程序在dayu210开发板上实现拉取RTSP视频流并且在屏幕上显示
  • ¥15 GD32H757的can通信配置
  • ¥20 nist随机数测试的问题
  • ¥20 帮我解决这个项目,thank you各位程序员
  • ¥15 哪位能用ea软件做一下,有偿