dp[l][r] = merge(dp[l][r-1], dp[l+1][r], compute(l, r))
where merge
merges the best results of all subarrays, and compute(l, r)
computes the
value for [l..r]
. This guarantees that dp[l][r]
will track the best value from all
subarrays. For this DP to work, we iterate by length of the subarray.