[
dp
]
BinarySearch 0599 K Stack Pops
Problem statement
https://binarysearch.com/problems/K-Stack-Pops/
Solution
Let use dp with states dp(m, k), where it is (current index of stack, nubmer of elements we still need to take). Then on each state we can try to take 0, ..., min(k, len(stacks[m])) elements from stack m.
Complexity
It is O(N * K * M) for time and O(N * K) for space.
Code
class Solution:
def solve(self, stacks, K):
N = len(stacks)
@lru_cache(None)
def dp(n, k):
if n == N:
if k == 0: return 0
if k > 0: return -float("inf")
ans = dp(n + 1, k)
sm = 0
for i in range(min(k, len(stacks[n]))):
sm += stacks[n][~i]
ans = max(ans, dp(n + 1, k - i - 1) + sm)
return ans
return dp(0, K)