两日一题Question2

博客解析了一道题目,涉及模拟和枚举算法,内容围绕如何在老师需要购买至少n支铅笔的情况下,确定最少购买多少包不同规格的铅笔。关键点在于处理余数不足一包的情况,采用向上取整计算最少包数。时间复杂度为O(m),其中m为包装种类数量。
摘要由CSDN通过智能技术生成

考察知识点: 模拟、枚举

解析: 由于老师只能买一种包装的铅笔,因此直接枚举买哪种包装,然后求出最少需要买多少包,才能使总数量不少于 n 即可。其中 n 是老师需要买的铅笔总数。
这一题的关键点或是技巧点就在于处理多出来不足一包铅笔的部分的处理手法(在之前奥赛C++在线测评系统中我们处理过类似的题目)。
假设当前枚举的包装中的铅笔是 s 个,则最少需要买 ⌈n/s⌉=⌊n+s−1/n⌋包。("⌈ ⌉“代表向上取整,”⌊ ⌋"代表向下取整)

时间复杂度: 枚举所有的包装种类,因为包装总类为m,因此总时间复杂度是 O(m)。

C++ 代码

#include <iostream>

using namespace std;

int n;
int pencil,price;
int res = 1e8;//科学计数法

int main(){
    cin >> n;
    for(int i=0;i<3;i++){
        cin >> pencil >> price;
        res = min(res,(n+pencil-1)/pencil*price);
    }
    cout << res;
  
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值