638.大礼包
题目描述
思路:DFS
class Solution:
def shoppingOffers(self, price: List[int], special: List[List[int]], needs: List[int]) -> int:
@lru_cache(None)
def dfs(remains):
ans = sum(r*price[i] for i, r in enumerate(remains))
if ans:
for s in special:
check = True
for i in range(len(remains)):
if s[i] > remains[i]:
check = False
break
if check:
new = list(remains)
for i in range(len(remains)):
new[i] -= s[i]
ans = min(ans, dfs(tuple(new)) + s[-1])
return ans
return dfs(tuple(needs))