Picking up coins
1from functools import lru_cache
2class Solution:
3 def pickingUpCoins(self, coins):
4 return self.topDown(coins, 0, len(coins) - 1)
5
6 @lru_cache(None)
7 def topDown(self, coins, i, j):
8 if i > j: return 0
9 comb1 = coins[i] + min(self.topDown(coins, i + 1, j - 1), self.topDown(coins, i + 2, j))
10 comb2 = coins[j] + min(self.topDown(coins, i + 1, j - 1), self.topDown(coins, i, j - 2))
11 return max(comb1, comb2)