1.二维dp
dp[i][j]代表的是j长度上找到i段,使得i段和最大。(其中最后一段的最后一位一定要是a[j],这句话不理解的可以看看http://blog.csdn.net/qq_36523667/article/details/78598426)
这时最后一段分为两种情况:
1.a[j]是最后一段的一部分
2.a[j]自己成为最后一段
用算式表示为
1.dp[i][j - 1] + a[j]意思就是从j-1中重新选i段,再把j添加到最后一段的最后
2.max(dp[i - 1][k]) + a[j],i - 1 <= k < j,意思就是从i-1到j中重新选i段取最大值,再加上最后一段组成i段
代码
// TODO: 2017/11/22 动态规划m子段-二维dp int dynamicM(int[] a, int m) { int n = a.length; int[][] dp = new int[100][100]; for (int i = 1; i <= m; i++) {