问题描述
小C来到了一家饭馆,这里共有 nn 道菜,第 ii 道菜的价格为 a_i
。其中一些菜中含有蘑菇,s_i
代表第 ii 道菜是否含有蘑菇。如果 s_i = '1'
,那么第 ii 道菜含有蘑菇,否则没有。
小C希望点 kk 道菜,且希望总价格尽可能低。由于她不喜欢蘑菇,她希望所点的菜中最多只有 mm 道菜含有蘑菇。小C想知道在满足条件的情况下能选出的最小总价格是多少。如果无法按照要求选择菜品,则输出-1
。
代码
def solution(s: str, a: list, m: int, k: int) -> int:
# PLEASE DO NOT MODIFY THE FUNCTION SIGNATURE
# write code here
assert len(s) == len(a)
tp = sorted(zip(a, s))
c0 = c1 = ans = 0
for v, ch in tp:
if ch == '1':
if c1 == m:
continue
c1 += 1
ans += v
c0 += 1
if c0 == k:
break
if c0 < k:
ans = -1
return ans
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)