1 条题解
-
0
📝 题目大意
高桥君想买一杯定价为 日元的饮料。他有两个选择:直接支付 日元,或者使用优惠券以 日元购买饮料,但必须额外从 道菜中选一道菜(价格为 )。求他喝到饮料所需的最小总金额。
💡 解题思路
-
题目分析:,数据范围很小,直接枚举即可。关键在于理解两种购买方式的比较:直接购买价格为 ,使用优惠券则总花费为 。
-
算法推导:
- 遍历 个菜品价格,找出最便宜的菜品价格
min_dish_price。 - 两种方案取最小值:
ans = min(P, Q + min_dish_price)。 - 样例 2 说明了关键点:当所有菜品都很贵时,直接买更划算(),所以不能默认使用优惠券一定更优。
- 遍历 个菜品价格,找出最便宜的菜品价格
-
边界与细节:
- 题目保证 ,所以优惠券的饮料价格本身是更低的,但加上菜品后可能超过 。
- 和 最大均为 ,
int类型足够()。
⏱️ 复杂度分析
- 时间复杂度:,只需一次遍历找出最小菜品价格。
- 空间复杂度:,仅使用常数个变量。
💻 标准代码 (C++)
#include<bits/stdc++.h> using namespace std; int main() { int n, p, q; cin >> n >> p >> q; int min_dish_price = INT_MAX; // 初始化为极大值,方便取 min for (int i = 0; i < n; i++) { int d; cin >> d; min_dish_price = min(min_dish_price, d); // 找最便宜的菜品 } // 两种方案:直接买 (p) 或用优惠券 (q + 最便宜的菜) int ans = min(p, q + min_dish_price); cout << ans << endl; return 0; } -
- 1
信息
- ID
- 735
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者