hdu 1024 max sum plus plus
来源:互联网 发布:wan端口和lan端口 编辑:程序博客网 时间:2024/06/06 12:30
#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>using namespace std;#define INF 0x3f3f3f3fint a[1010000];//存储输入的数据int dp[1010000];//记录前j个数不相交子段的最大值int mmax[1010000];int main(){int m,n;int i,j;int mmmax;while(scanf("%d%d",&m,&n)!=EOF){for(i=1;i<=n;i++){scanf("%d",&a[i]);dp[i]=0;mmax[i]=0;}dp[0]=0;mmax[0]=0;for(i=1;i<=m;i++){mmmax=-INF;/*这一步不能少分析: 从下面的程序来看,当i=1运行完的时候,mmmax是一个在 1。。。n中取一段时的最大值 接下来就是i=2了,此时要取二段了,那么如果你不执行这一步的 话,那么i=2的时候mmax[1]=-INF(这个是没影响的),对mmmax=max(mmmax,dp[j]) 这一步就产生了影响 ,因为如果mmmax>dp[j]那么结果就会变了,紧接着就会对i=3 的时候mmax[2]=mmmax这一步产生影响,接下去就是连环影响了 */ for(j=i;j<=n;j++){dp[j]=max(dp[j-1]+a[j],mmax[j-1]+a[j]);/*是对这一步的转化 status[i][j]=max(status[i-1][j]+a[j],max(status[0][j-1],,,,status[i-1][j-1])+a[j]); */ mmax[j-1]=mmmax;mmmax=max(mmmax,dp[j]);/*只要你把题目的数据 2 6 -1 4 -2 3 -2 3代进去模拟一下,你就会加深理解了, 另外多看看别人的博客上的思路,我这里写的比较简单,不过重在自己模拟一下 会更好理解的 */ }}printf("%d\n",mmmax);}return 0;}
0 0
- hdu 1024Max Sum Plus Plus
- hdu 1024 Max Sum Plus Plus--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
- hdu 1024 Max Sum Plus Plus
- hdu 1024 Max Sum Plus Plus(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
- 【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
- hdu 1024 Max Sum Plus Plus
- HDU 1024Max Sum Plus Plus
- Shiny应用基础(8):杂项
- [BZOJ2729][HNOI2012]排队
- 交叉编译Android系统Linux层应用软件程序并运行
- 2015.9.21 关于文件引用路径
- iOS开发 - UI组件(视图集)
- hdu 1024 max sum plus plus
- linux INIT_WORK 创建工作队列
- 第四周-项目5-自建算法库(循环双链表)
- Android Handler 异步消息处理机制 《第一行代码》
- HDU 4612 Warm up(边双连通分量+树的直径)
- PHP几个函数pathinfo()、dirname()、basename()
- centos的chkconfig指令
- 第4周 项目1 - 建立单链表
- 使用Fckeditor