HDU 1003 Max Sum (DP)
来源:互联网 发布:臭氧消毒知乎 编辑:程序博客网 时间:2024/05/29 08:31
思路:此题在NYOJ做过一道类似的。当时那题不需要标记出左右的区间。
抛开DP来讲,要找到最大和的sub序列应当是在加和到负数的时候就应当将和sum清零重新计算。DP的话只需要前缀和与a[i]自身比较就行。同时记录好前后位置。尤其在记录左端的位置,并不是有了a[i]>dp[i-1]+a[i]这个关系就要更新l的值。毕竟找到是max指,所以必须在更新max的时候将po赋值给l;
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>#include<string>#include<queue>#include<map>#include<stack>#define L1 long long#define L2 int#define inf 0x3f3f3f3fusing namespace std;const int m1=1001000;const int m2=1010;L2 dp[100010],a[100010];int main(){ int n,m,i,j,k; int cla; scanf("%d",&cla); for(int zu=1;zu<=cla;zu++){ scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%d",&a[i]); } memset(dp,0,sizeof(dp)); printf("Case %d:\n",zu);int ma=-inf; int l=1,r=1,po=1; for(i=1;i<=n;i++){ int t=dp[i-1]+a[i]; if(a[i]>t) { dp[i]=a[i]; po=i; } else dp[i]=t; if(dp[i]>ma){ r=i;ma=dp[i];l=po; } } printf("%d %d %d\n",ma,l,r); if(zu!=cla)puts(""); } return 0;}
0 0
- hdu 1003 Max Sum (DP)
- HDU 1003:Max Sum(DP)
- HDU 1003 Max Sum(DP)
- HDU 1003 Max Sum (经典DP)
- HDU 1003 Max Sum (DP)
- HDU-1003 Max Sum (DP)
- hdu 1003Max Sum(dp)
- HDU 1003 Max sum(dp)
- hdu 1003 Max Sum (dp)
- HDU 1003 Max Sum(DP,水题)
- HDU 1003:Max Sum(简单dp)
- HDU-1003 Max Sum(经典DP)
- HDU--1003 -- Max Sum [dp]
- HDU 1003 Max Sum(dp)
- HDU 1003 Max Sum(dp)
- hdu 1003 Max Sum dp
- hdu 1003 Max Sum (DP)
- HDU 1003 Max Sum(DP)
- ionic学习笔记1
- key/value数据库
- C#类型基础----不可变类型
- Yii的日志的处理机制以及扩展案例
- Thinking in Java 读书笔记(一) --对象导论
- HDU 1003 Max Sum (DP)
- json和object之间相互转换
- POJ1741&&BZOJ1468 男人八题
- 2015年总结
- Java 字符串索引indexOf
- 代理模式
- BZOJ-1433 假期的宿舍 最大流+基础建图
- 全面解析Linux 内核 3.10.x - 进程链表
- 第一次面试经历