题目解析:最小总价格选择菜品
题目描述: 小C在一家饭馆面对多个菜品选择,每个菜品有对应的价格和是否含有蘑菇的标记。小C希望在不超过蘑菇菜品数量限制的情况下,选择k道菜使得总价格最低。如果无法满足条件,则输出-1。 思路:
- 将菜品按照价格从小到大排序。
- 优先选择不含蘑菇的菜品,如果蘑菇菜品数量未达上限m,也选择含蘑菇的菜品。
- 确保选择的菜品数量达到k道。
- 如果最终选择的菜品数量不足k道,则输出-1,否则输出最小总价格。
代码 :def solution(s: str, a: list, m: int, k: int) -> int: dishes = [(a[i], s[i] == '1') for i in range(len(s))] dishes.sort(key=lambda x: x[0]) total_price = 0 mushroom_count = 0 selected_count = 0 for price, has_mushroom in dishes: if selected_count == k: break if has_mushroom and mushroom_count == m: continue total_price += price selected_count += 1 if has_mushroom: mushroom_count += 1 if selected_count < k: return -1 return total_price if name == 'main': print(solution("001", [10, 20, 30], 1, 2) == 30) print(solution("111", [10, 20, 30], 1, 2) == -1) print(solution("0101", [5, 15, 10, 20], 2, 3) == 30) 知识总结 新知识点:
- 列表推导式:简洁地创建列表。
- 元组:存储多个相关联的数据。
- lambda 函数:匿名函数,用于排序等操作。
- 条件表达式:用于逻辑判断和选择操作。 理解和建议:
- 在解决实际问题时,首先要明确问题的目标和限制条件,然后设计出合理的算法流程。
- 对于排序问题,通常需要考虑如何高效地比较和选择元素,Python 的内置排序函数非常强大,可以大大简化代码。
- 对于复杂的问题,分解成小的模块逐一解决,最后再将模块组合起来。
学习计划 刷题计划:
- 每天至少刷一道算法题,保持手感和思维的活跃。
- 针对不同类型题目,如排序、搜索、动态规划等,制定专项练习计划。
- 定期回顾和总结做过的题目,特别是那些错误或耗时较长的题目。 利用错题学习:
- 建立错题本,记录错误原因和正确的解题思路。
- 定期复习错题,尝试不看答案重新解答。
- 对于反复出错的知识点,查找资料进行深入学习。 工具运用 AI 刷题功能:
- 利用 AI 刷题功能快速获取题目的反馈,如代码的正确性和性能。
- 根据 AI 的反馈调整解题思路,优化代码。 结合其他学习资源:
- 结合在线教程、书籍等资源,对特定知识点进行深入学习。
- 参加编程社区和论坛,与其他学习者交流解题经验和技巧。
- 利用在线判题系统,如 LeetCode、Codeforces 等,进行实战演练。