大家晚上好啊!哈哈,今天继续给大家带来新的刷题篇。好了,闲话少说,接下来咱们就开始刷题! 今天来一道中等难度的题目哈哈。
问题描述
小C来到了一家饭馆,这里共有 𝑛 n 道菜,第 𝑖 i 道菜的价格为 a_i。其中一些菜中含有蘑菇,s_i 代表第 𝑖 i 道菜是否含有蘑菇。如果 s_i = '1',那么第 𝑖 i 道菜含有蘑菇,否则没有。 小C希望点 𝑘 k 道菜,且希望总价格尽可能低。由于她不喜欢蘑菇,她希望所点的菜中最多只有 𝑚 m 道菜含有蘑菇。小C想知道在满足条件的情况下能选出的最小总价格是多少。如果无法按照要求选择菜品,则输出-1。
测试样例 样例1:
输入:s = "001", a = [10, 20, 30], m = 1, k = 2 输出:30
样例2:
输入:s = "111", a = [10, 20, 30], m = 1, k = 2 输出:-1
样例3:
输入:s = "0101", a = [5, 15, 10, 20], m = 2, k = 3 输出:30
解答
还是直接把问题直接输入给豆包ai,直接让他把解题代码给我们。然后遇到不会的可以直接向ai提问。 def solution(s: str, a: list, m: int, k: int) -> int: # 将菜品按价格排序,并记录是否含有蘑菇 dishes = sorted(zip(a, s))
# 初始化最小总价格为无穷大
min_total_price = float('inf')
# 尝试选择含有蘑菇的菜品数量从0到m
for mushrooms in range(m + 1):
# 选择含有蘑菇的菜品数量为mushrooms
selected_dishes = []
non_mushroom_count = 0
for price, has_mushroom in dishes:
if has_mushroom == '1' and mushrooms > 0:
selected_dishes.append(price)
mushrooms -= 1
elif has_mushroom == '0':
selected_dishes.append(price)
non_mushroom_count += 1
# 如果已经选择了k道菜,停止选择
if len(selected_dishes) == k:
break
# 如果选择的菜品数量等于k,计算总价格
if len(selected_dishes) == k:
min_total_price = min(min_total_price, sum(selected_dishes))
# 如果无法选择k道菜,返回-1
return min_total_price if min_total_price != float('inf') else -1
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)
以上就是解决问题的代码哈哈
我们以后遇到问题可以和ai多多交流。我发现我现在的生活已经渐渐离不开ai了,ai确实在方方面面赋能了我们的生活。
今天的刷题分享就到这里了,下次我们再见!