Problem 3 Split Array Largest Sum
Step 1 dp definition
dp[k][i] represent the smallest largest sum we can get using first i element to parition into k pieces
用i个元素,分成k份,minimized largest sum是多少
Step 2 base case
dp[1][i] = sum of array[j], j = 1, ...., i
dp[any][0] = XXX 没得可分,invalid case
dp[1][any] = 不用分,不用分就是所有元素= sum of elements!!
Step3: Induction Rule
dp[k][i] = min of maximum in (dp[k - 1][j] (左大段) , sum[array[j+1], ... array[i]])
= minimum of all the way to parition, in each partition: maximum in (dp[k - 1])[j], prefixSum[n] -prefixSum[j])
左大段,右小段
length = j 左大段 | 右小段 index range: j to n-1
注意
注意那部分sum可以用prefix Sum
[0, arr[0], arr[0] + arr[1],....., arr[0] + arr[1] ... arr[j],..., arr[0] + ...+ arr[n - 1]]
0, 1, 2.....j,...,n
use case: sum of range [j, n - 1]
[0, ... j - 1], [0, ... n- 1] ===>. (j - 1, n-1]
sum of range [0, j - 1]: prefixSum[j]
sum of range[0, n - 1]: prefixSum[n]
sum or range[j, n - 1]: prefixSum[n] - prefixSum[j]
左大段的长度j也不是随意:
不能切寂寞: j < 原始问题的长度 ==》 j <= n - 1
为了让子问题还能分成k-1份,左大的段长度至少需要有长度k- 1
valid range: [k - 1, 愿问题的长度 - 1]
TC & SC
O(n*n * k), O(n * k)
Last updated