hdu 1024 Max Sum Plus Plus (求一个序列中选出的m个不相交子段和的最大值)
来源:互联网 发布:小甲鱼windows教程 编辑:程序博客网 时间:2024/06/04 00:44
这题真的好难理解好难实现啊。。。。
本来把状态方程写出来就已经有点困难了。。。
要更新状态更难。。。好难啊!!!
最大和子序列的进化版 ,
题意:要求从一序列中取出若干段 , 使得这几段的和最大 .
设 dp[i][j] 为前 j 个数字分成 i 段的最大和 .
转移方程为 :
dp[i][j]=max(dp[i][j-1],max(dp[i-1][k]))+a[j](i-1<=k<=j-1)
其表达的意义就两个不同的决策 : 前者表示与 j-1 所在的一段合并成一段 , 后者表示以
a[j] 为首开始第 i 段 .
pre[j-1]表示max(dp[i-1][k]) i-1<=k<=j-1
#include<cstdio>#include<iostream>#include<cstring>#define INF 0xffffffusing namespace std;int now[1000010],pre[1000010];int a[1000010];int main(){ int m,n,maxx; while(scanf("%d%d",&m,&n)!=EOF) { for(int i=1;i<=n;i++) scanf("%d",&a[i]); memset(now,0,sizeof(now)); memset(pre,0,sizeof(pre)); for(int i=1;i<=m;i++) { maxx=-INF; for(int j=i;j<=n;j++) { now[j]=max(now[j-1],pre[j-1])+a[j]; pre[j-1]=maxx; if(now[j]>maxx) maxx=now[j]; } } printf("%d\n",maxx); } return 0;}
0 0
- hdu 1024 Max Sum Plus Plus (求一个序列中选出的m个不相交子段和的最大值)
- hdu 1024 Max Sum Plus Plus(dp求m个不相交子段和的最大值)
- HDU 1024 Max Sum Plus Plus(求m个不相交连续子序列最大和/01背包)
- HDU 1024 Max Sum Plus Plus(动态规划,给定一个数组,求其分成m个不订交子段和最大值的题目)
- hdu 1024 Max Sum Plus Plus(动态规划+m子段和的最大值)
- HDACM1024 max sum plus plus:m个不相交子段的最大和
- 1486【动态规划★★】Max Sum Plus Plus.(求n个数m个不相交子段的最大和)
- 【HDU1024】Max Sum Plus Plus (m个不相交连续子列的最大和)
- hdoj Max Sum Plus Plus Plus 1244 (DP)m个连续段的最大和
- hdu 1024 Max Sum Plus Plus(最大M子段和)
- hdu 1024 Max Sum Plus Plus(最大m子段和)
- HDU 1024 Max Sum Plus Plus(最大M子段和)
- hdu 1024 Max Sum Plus Plus(m段最大子列和)
- hdu 1024 最大M子段和 Max Sum Plus Plus(dp)(中等难度)
- HDU-1024 Max Sum Plus Plus (最大M子段和问题)
- 【HDU 1024】 Max Sum Plus Plus【动态规划求最大M子段和详解-好题 】
- HDU 1024 Max Sum Plus Plus求前n个数中的若干个数分为连续的m段的最大和值(解析)
- hdu 1024 Max Sum Plus Plus(dp && 最大m子段和)
- 采用加密方式解决混合云安全的挑战
- TO_CHAR函数的用法
- 迈阿密大学的IT改造:集中化与云端化
- 在Windows平台上安装Node.js及NPM模块管理
- kettle常见问题之错误处理
- hdu 1024 Max Sum Plus Plus (求一个序列中选出的m个不相交子段和的最大值)
- test
- oracle case when
- 基于Ubuntu交叉编译FFmpeg Windows SDK
- 2013年回顾和2014年目标
- 关于全景图像的拼接
- 数据处理之数据流程分析
- Python 文件夹和文件操作汇总
- HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理