AlgoDesign

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)