算法
(模拟,枚举) $O(m)$
由于老师只能买一种包装的铅笔,因此直接枚举买哪种包装,然后求出最少需要买多少包,才能使总数量不少于 $n$ 即可。其中 $n$ 是老师需要买的铅笔总数。
假设当前枚举的包装中的铅笔是 $s$ 个,则最少需要买 $\lceil \frac{n}{s} \rceil = \lfloor \frac{n + s - 1}{s} \rfloor$ 包。
时间复杂度
每种包装枚举一次,因此时间复杂度是 $O(m)$,其中 $m$ 是包装总数。
C++ 代码
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
int res = 1e9;
for (int i = 0; i < 3; i ++ )
{
int s, p;
scanf("%d%d", &s, &p);
res = min(res, (n + s - 1) / s * p);
}
printf("%d\n", res);
return 0;
}
qp
牛逼