DP ( 滚动数组 )——Max Sum Plus Plus ( HDU 1024 )
2016-08-03 20:08
441 查看
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1024
给出n个数,要求从中分出m段不重叠的子段,使得所有的子段和加起来最大。
分析:
因为n的范围很大,最大为1,000,000,而m的范围未知,所以我们如果开二维数组来进行动态规划,很可能会爆内存,所以,我们采用一维滚动数组的方式,只记录需要记录的值即可。
题解:
使用dp[j]记录分为i组,且总共j个数时候的最大字段和,用另一个Mmax[j]数组记录上分为i-1组时候,总共j个数时候的最大字段和。
用一个for循环遍历1~m组,再嵌套一个for循环从i~n个数,每次取 加入这个数到组里和把这个数单独成一个组时的最大值,更新到dp[j]中,并把Mmax[j-1]的值更新。
AC代码:
http://acm.hdu.edu.cn/showproblem.php?pid=1024
给出n个数,要求从中分出m段不重叠的子段,使得所有的子段和加起来最大。
分析:
因为n的范围很大,最大为1,000,000,而m的范围未知,所以我们如果开二维数组来进行动态规划,很可能会爆内存,所以,我们采用一维滚动数组的方式,只记录需要记录的值即可。
题解:
使用dp[j]记录分为i组,且总共j个数时候的最大字段和,用另一个Mmax[j]数组记录上分为i-1组时候,总共j个数时候的最大字段和。
用一个for循环遍历1~m组,再嵌套一个for循环从i~n个数,每次取 加入这个数到组里和把这个数单独成一个组时的最大值,更新到dp[j]中,并把Mmax[j-1]的值更新。
AC代码:
#include <iostream> #include <cmath> #include <cstdio> #define INF 0x7fffffff using namespace std; #define MAXN 1000000 int n,m; int S[1123456]; int dp[MAXN+10]; int Mmax[MAXN+10]; int main() { while(~scanf("%d%d", &m, &n)) { for(int i=1;i<=n;i++) { scanf("%d", &S[i]); dp[i] = 0; Mmax[i] = 0; } dp[0] = 0; Mmax[0] = 0; int MMmax; for(int i=1; i<=m; i++) { MMmax = -INF; for(int j=i; j<=n; j++) { dp[j] = max(dp[j-1] + S[j], Mmax[j-1]+S[j]); Mmax[j-1] = MMmax; MMmax = max(MMmax, dp[j]); } } cout << MMmax << endl; } return 0; }
相关文章推荐
- hdu 1024 Max Sum Plus Plus 一串数字中,m段连续数字最大和 滚动数组+dp
- hdu 1024 Max Sum Plus Plus(滚动数组)(DP)
- 【hdu 1024】Max Sum Plus Plus —— dp && 滚动数组
- HDU 1024 Max Sum Plus Plus (DP·滚动数组)
- 【HDU 1024】Max Sum Plus Plus(DP+滚动数组优化+最大m段字段之和)
- HDU 1024 Max Sum Plus Plus(DP+滚动数组)
- HDU 1024 Max Sum Plus Plus【DP+滚动数组】
- HDU ~ 1024 ~ Max Sum Plus Plus(DP+滚动数组)
- HDU 1024 Max Sum Plus Plus --- dp+滚动数组
- HDU 1024 Max Sum Plus Plus(普通dp && 滚动数组优化)
- hdu 1024 Max Sum Plus Plus (滚动数组 &&动态规划)
- HUD-1024-Max Sum Plus Plus DP+滚动数组
- 杭电ACM OJ 1024 Max Sum Plus Plus 动态规划 二维dp+滚动数组dp优化
- HDU - 1024 Max Sum Plus Plus (滚动数组)
- HDU - 1024 Max Sum Plus Plus(DP + 滚动数组)
- DP+滚动数组-HDU-1024-Max Sum Plus Plus
- Hdu 1024 Max Sum Plus Plus 动态规划+滚动数组
- HDU-1024 Max Sum Plus Plus 动态规划 滚动数组和转移优化
- HDU 1024 Max Sum Plus Plus(dp最大m子段和)
- HDU 1024 Max Sum Plus Plus【DP+优化时间复杂度】