375. 猜數字大小 II
阿新 • • 發佈:2021-11-12
我們正在玩一個猜數遊戲,遊戲規則如下:
我從1到 n 之間選擇一個數字。
你來猜我選了哪個數字。
如果你猜到正確的數字,就會 贏得遊戲 。
如果你猜錯了,那麼我會告訴你,我選的數字比你的 更大或者更小 ,並且你需要繼續猜數。
每當你猜了數字 x 並且猜錯了的時候,你需要支付金額為 x 的現金。如果你花光了錢,就會 輸掉遊戲 。
給你一個特定的數字 n ,返回能夠 確保你獲勝 的最小現金數,不管我選擇那個數字 。
dp不可能dp的,只會暴搜吃吃爛分
1 class Solution: 2 def getMoneyAmount(self, n: int) -> int: 3 self.dict = {}4 return self.search(0, n) 5 6 def search(self, left, right): 7 if right <= left: 8 return 0 9 10 if self.dict.get((left, right), False): 11 return self.dict.get((left, right)) 12 13 # split_index = self.find_split_index(nums) 14 max_cost = float('inf') 15 16 for split_index in range(left, right + 1): 17 cost = split_index 18 cost += max(self.search(left, split_index - 1), self.search(split_index + 1, right)) 19 max_cost = min(max_cost, cost) 20 self.dict[(left, right)] = max_cost 21 22 returnmax_cost