刷题篇3 | 豆包MarsCode AI刷题

167 阅读2分钟

大家晚上好啊!哈哈,今天继续给大家带来新的刷题篇。好了,闲话少说,接下来咱们就开始刷题! 今天来一道中等难度的题目哈哈。

问题描述

小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确实在方方面面赋能了我们的生活。
今天的刷题分享就到这里了,下次我们再见!