HDU1024:
题意: 把n个数分出m个区间,使得区间和最大。
思路:DP。状态:dp[i][j]表示把前j个数组分成i组的区间和。
转移方程:dp[i][j] = max(dp[i][j - 1], dp[i - 1][j - 1]) + a[j]; 其中: i - 1 <= k <= j - 1。
第一个状态表示前j - 1个数分成 i 组后将第 j 个数并入最后一个组,
第二个状态表示前j - 1个数分成 i - 1 组之后第 j 个数单独成一组。
因为二维dp会炸,需要优化:
可以发现dp[i - 1][j - 1]可以用一个pre数组记录, 则转移方程可以写成:
dp[i][j] = max(dp[i][j - 1], pre[j - 1]) + a[j];
此时又可以发现dp数组的第一维是对结