hdoj 1024 Max Sum Plus Plus
2014-10-30 15:58
281 查看
给你一个有n个元素的序列,是m个子序列的和最大
用二维dp[i][j]来表示前 j个元素i段的最大和,由于n比较大,
所以用到滚动数组了
用二维dp[i][j]来表示前 j个元素i段的最大和,由于n比较大,
所以用到滚动数组了
#include<stdio.h> #include<string.h> #define N 1000001 using namespace std; int m,n,Max; //Max保存这最大值 int now ; //包含第j个数据的最大和 int pre ; //前j个数据的最大和 int a ; int main() { int i,j; while(scanf("%d%d",&m,&n)!=EOF) { for(i=1;i<=n;i++) scanf("%d",&a[i]); memset(now,0,sizeof(now)); memset(pre,0,sizeof(pre)); for(i=1;i<=m;i++) //m段 { Max=-99999999; for(j=i;j<=n;j++) { now[j]=max(now[j-1]+a[j],pre[j-1]+a[j]); //now[j]有两种来源,一种是直接在第i个子段之后添加a[j] //一种是是a[j]单独成为1个子段 pre[j-1]=Max; //更新pre使得pre是前j-1个中最大子段和 if(now[j]>Max) Max=now[j]; } } printf("%d\n",Max); } return 0; }
相关文章推荐
- HDOJ-1024 Max Sum Plus Plus
- HDOJ1024 max sum plus plus(DP)
- HDOJ 1024 Max Sum Plus Plus 最大M字段和
- HDOJ 1024 Max Sum Plus Plus
- hdoj 1024 Max Sum Plus Plus 【动态规划经典题目】【m子段和】
- HDOJ 1024 Max Sum Plus Plus
- hdoj 1024 Max Sum Plus Plus(m个子段最大和)
- HDOJ 1024 Max Sum Plus Plus 最大K段子序列和(01背包 + 滑动数组 + 优化)
- 每日三题-Day1-B(HDOJ 1024 Max Sum Plus Plus 最大m子段和)
- hdoj1024 Max Sum Plus Plus (DP)
- hdoj1024 Max Sum Plus Plus(DP!DP!)
- Hdoj 1024 Max Sum Plus Plus 【DP】
- hdoj Max Sum Plus Plus 1024 (DP) m个连续数组最大和
- HDOJ 1024 Max Sum Plus Plus
- HDOJ-1024 Max Sum Plus Plus (最大M子段和问题)
- HDOJ HDU 1024 Max Sum Plus Plus
- HDOJ 1024 Max Sum Plus Plus -- 动态规划
- HDOJ 1024 Max Sum Plus Plus
- HDOJ 1024 Max Sum Plus Plus -- 动态规划
- HDOJ-1024 Max Sum Plus Plus (最大M子段和问题)