We use cookies for site analytics. Accept to help us understand how the site is used. See our Privacy Policy for details.
A hard dynamic programming problem, graded against 5 test cases (2 of them hidden).
Overlapping subproblems solved once and reused - the pattern candidates fear most.
Reach for it when you see: "Number of ways", "minimum/maximum cost", or a recursion that recomputes the same state.
More Dynamic Programmingproblems →Pad nums with 1 on both ends. Let `dp[i][j]` = max coins obtainable from bursting all balloons strictly between i and j, where `balloons[i]` and `balloons[j]` have not been burst.
Choose the *last* balloon `k` to burst inside `(i, j)`. By the time it's last, the only balloons left in that range are `k` itself with neighbours `i` and `j`. So
```
dp[i][j] = max over k in (i, j) of dp[i][k] + dp[k][j] + nums[i] * nums[k] * nums[j]
```
Iterate by increasing range length. Final answer is `dp[0][n+1]` of the padded array.
The full reference solution in every supported language stays in the editor above - reveal it there once you have had a real attempt.
Read off this problem's own test suite, so these are the cases a submission actually has to survive.
These apply to the pattern as a whole, not just this problem.