题解
购物节
1 条题解
-
0
解题思路
优惠后单本
x-1元、十本装y-1元。要买 n 个本子,最少花多少钱。因为十本装可能更划算(也可能多买几个整十更划算),可以枚举买多少套十本装:从 0 套到
n/10+1套,剩下的本子用单本补足(够了就补 0),每种方案算一次总价,取最小的。参考代码
#include <iostream> using namespace std; int main() { int x, y, n; cin >> x >> y >> n; // 优惠后:单本 x-1 元,十本装 y-1 元 int ans = 2147483647; // 枚举买 k 套十本装,剩下的用单本补足 for (int k = 0; k <= n / 10 + 1; k++) { int have = k * 10; // 十本装给的本子数 int need = n - have; // 还缺几个 if (need < 0) need = 0; // 够了就不用再买 int cost = k * (y - 1) + need * (x - 1); if (cost < ans) ans = cost; } cout << ans << endl; return 0; }复杂度分析
枚举的套数不超过 n/10+1 次,n 最大 100,时间复杂度 O(n/10),额外空间复杂度 O(1)。
- 1