酷代码 AI
菜单

题目描述 小 X 开了一家糖果店,售卖 n 种糖果,每种糖果均有无限颗。对于不同种类的糖果,小 X 采用了不同的促销策略。具体地,对于第 i (1≤i≤n) 种糖果,购买第一颗的价格为 x i 元,第二颗为 y i 元,第三颗又变回 x i 元,第四颗则为 y i 元,以此类推。 小 R 带了 m 元钱买糖果。小 R 不关心糖果的种类,只想到得到数量尽可能多的糖果。你需要帮助小 R 求出,m 元钱能购买的糖果数量的最大值。 输入 输入的第一行包含两个正整数 n,m,代表糖果的种类数和小 R 的钱数。 输入的第 i+1 (1≤i≤n) 行包含两个正整数 x i ,y i ,分别表示购买第 i 种糖果时第奇数颗的价格和第偶数颗的价格。 输出 输出一行一个非负整数,表示 m 元钱能购买的糖果数量的最大值。 样例输入 复制 2 10 4 1 3 3 样例输出 复制 4 提示 输入 #2 3 15 1 7 2 3 3 1 输出 #2 8 /upload/coder666.com/file/20251203/20251203142648_93633.zip

以下是解决该问题的 Python 代码: ```python # 读取输入 n, m = map(int, input().split()) # 存储每种糖果的价格信息 candies = [] for _ in range(n): x, y = map(int, input().split()) candies.append((x, y)) # 初始化最大糖果数量为 0 max_candy_count = 0 # 遍历所有可能的购买组合 for i in range(n): money = m candy_count = 0 # 按当前糖果的价格规则购买 while money > 0: if (candy_count + 1) % 2 == 1: # 购买奇数颗糖果 if money >= candies[i][0]: money -= candies[i][0] candy_count += 1 else: break else: # 购买偶数颗糖果 if money >= candies[i][1]: money -= candies[i][1] candy_count += 1 else: break # 更新最大糖果数量 if candy_count > max_candy_count: max_candy_count = candy_count print(max_candy_count) ``` 代码解释 1. 输入读取:首先读取糖果的种类数 `n` 和小 R 拥有的钱数 `m`。然后循环 `n` 次,每次读取每种糖果购买第奇数颗和第偶数颗的价格,将其存储在 `candies` 列表中。 2. 初始化:将最大糖果数量 `max_candy_count` 初始化为 0。 3. 遍历所有糖果种类:对于每种糖果,模拟购买过程。 - 初始化剩余钱数 `money` 为 `m`,已购买的糖果数量 `candy_count` 为 0。 - 进入循环,只要还有钱就继续尝试购买。根据当前要购买的是奇数颗还是偶数颗糖果,检查剩余钱数是否足够支付相应价格。如果足够,扣除相应的钱数并增加糖果数量;如果不够,则停止购买。 4. 更新最大糖果数量:每次完成一种糖果的购买模拟后,将当前购买的糖果数量与最大糖果数量比较,如果当前数量更大,则更新最大糖果数量。 5. 输出结果:最后输出最大糖果数量。 复杂度分析 - 时间复杂度:$O(n * \frac{m}{\min(x_i, y_i)})$,其中 $n$ 是糖果的种类数,$m$ 是小 R 拥有的钱数,$\min(x_i, y_i)$ 是每种糖果价格中的较小值。对于每种糖果,最多需要进行 $\frac{m}{\min(x_i, y_i)}$ 次购买尝试。 - 空间复杂度:$O(n)$,主要用于存储每种糖果的价格信息。 [2025-12-11 11:49:33 | AI问答 | 652点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多