dp[i] = 0; maxsum[i] = 0; } for(inti = 1 ; i <= m ; i++) { MAX = -inf; for(intj = i ; j <= n ; j++) { dp[j] = max(dp[j - 1] + a[j] , maxsum[j - 1] + a[j]); maxsum[j - 1] = MAX; MAX = max(MAX , dp[j]); } } printf("%d\n", MA...
很显然发现O(n^3)超时,那么开始优化。 第一个显然的优化是max(dp[k][j-1]),这个东西可以一边计算一边维护,但一定要注意细节。 第二个优化其实也是很显然,滚动数组优化掉第一维。 提交过程 WAmaxdp数组维护错了 AC 代码 #include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;constintmaxn=...
HDU 1024 Max Sum Plus Plus (dp) 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1244 题意:从1个n元素的序列中选出m个互不相交的连续子集,使得它们的和最大。 思路:令dp(i, j)表示前j个元素选出i段(第j个元素必须选)的最大和,则有 dp(i, j) = max { dp(i, j-1)+a......
HDU 1024 Max Sum Plus Plus (dp) 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1244 题意:从1个n元素的序列中选出m个互不相交的连续子集,使得它们的和最大。 思路:令dp(i, j)表示前j个元素选出i段(第j个元素必须选)的最大和,则有 dp(i, j) = max { dp(i, j-1)+a[j], dp(...
传送门 题意是给你个数字序列,现在让你把这个序列分成m个连续的子序列,且要求这m个子序列的累加和最大。 思路:这道题的题意可以理解为问在序列为末尾时,把序列分为m个子序列这个状态时的最大累加和,那么可以得出这个状态应该是由上一个状态转移得来:(因为dp[i][j]表示数到第j个字符时,前j个数字序列被分...
HDU - 1024 Max Sum Plus Plus(DP + 滚动数组),题目大意:求m个不相交区间的最大和解题思路:这题是参考别人的,传送门再自己组织一下是独立的区间,那么dp[i
HDU1003 Max Sum(最大子串和)& HDU1024 Max Sum Plus Plus #Max Sum Description: 一个数字序列,求max(∑k=ijk2,1<=i<=j<=n){{max(\sum_{k=i}^j k^2,1<=i<=j<=n)}}max(∑k=ijk2,1<=i<=j<=n) 状态:dp[i],前i个数,以第i个数结尾的子串的和的最大值,之所以必须要求以第...
而d[i][x]只与d[i-1][x]有关,所以可以将其降低至一维。即dp[j]表示前j个数所分段后的和。因为dp[i-1][k]的取值需要一重循环,极有可能导致超时,所以使用数组max[],存储当前层的最大值,以供下一层求值使用。dp[j] = max(dp[j-1] + a[j], max[j-1] + a[j])...
HDU 1024 Max Sum Plus Plus 题意:可不连续的m个子段的最大和 分析:首先由于n很大,所以需要运用滚动数组,其次单个值也不小所以得考虑int64 接下来就是动态规划的思路了,这道题想了大概一上午没什么好思路,只想到第j个数要不属于第i组,要不独自成组 所以我只想到的转移方程为dp[i,j]=max(dp[i-1,j-1...
Max Sum Plus Plus HDU - 1024(DP) Now I think you have got an AC in Ignatius.L’s “Max Sum” problem. To be a brave ACMer, we always challenge ourselves to more difficult problems. Now you are faced with a more difficult problem....