finished 1024 DP

/*
本题的大致意思为给定一个数组，求其分成m个不相交子段和最大值的问题。
设Num为给定数组，n为数组中的元素总数，Status[i][j]表示前i个数在选取第i个数的前提下分成j段的最大值，其中1<=j<=i<=n
&& j<=m，状态转移方程为：

Status[i][j]=Max(Status[i-1][j]+Num[i]，Max(Status[0][j-1]~Status[i-1][j-1])+Num[i])

乍看一下这个方程挺吓人的，因为题中n的限定范围为1~1,000,000而m得限定范围没有给出，m只要稍微大一点就会爆内存。但仔细分析后就会发现Status[i][j]的求解只和Status[*][j]与Status[*][j-1]有关所以本题只需要两个一维数组即可搞定状态转移。
*/
/*
设dp[i][j] 为前j个数字组成i段的最大和。（前提是i<=j ,这是显而易见的，当小于的时候不能组成i段）
所要达到的状态 :dp[i][j].
需要的条件：1、前j-1个数，组成i段的最大和 ；2、前j-1个数，组成的i-1段的最大和。

解释：由dp[i-1][j-1]到dp[i][j]，指的是当前第j个数单独为一段，dp[i][j-1]->dp[i][j]，第j个数接在第i段后面。

继续深入：我们是要求dp[i-1][j-1],dp[i][j-1]的最大值。那么i段就是在当前这个循环更新i->n状态的，所以dp[i][j-1]时刻在更新，反之，当前dp[i-1][j-1]的状态没有得到更新，那么我们就要加入这个j号元素进入时的更新保证dp[i-1][j-1]是当前可满足状态中最大的。
完全的动态规划转移方程dp[i][j]=MAX(dp[i][j-1],dp[i-1][k]) 其中i<=k<=j。
回头再看：n的最大值为100W，二维数组出来就需要巨额的空间。但是想象，当前需要更新的状态是不是就与当前上一状态和上一层的状态有关。
最终解决办法：采用滚动数组（或者两个一维数组）。
*/