记录dp[i][j]表示以第i个元素结尾,有j组的时候的最大和,那么有dp[i][j]=max{dp[k][j-1]}+sum[i-l[j]+1][i],其中k+l[j]<=i,那么这样的转移是O(n)的,为了优化,记录s[i][j]表示s[0][j]到s[i][j]中的最大dp值,那么可以在O(1)的时间内做到转移,最后可以得到一个转移方程:
dp[i][j]=s[i][j-1]+sum[i-l[j]+][i]。
注意sum数组可以用前n项和得到。
我的代码中用val直接表示前n项和。
我的代码: