# Max Sum

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 218423    Accepted Submission(s): 51573

Problem Description
Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14.

Input
The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line starts with a number N(1<=N<=100000), then N integers followed(all the integers are between -1000 and 1000).

Output
For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line contains three integers, the Max Sum in the sequence, the start position of the sub-sequence, the end position of the sub-sequence. If there are more than one result, output the first one. Output a blank line between two cases.

Sample Input
2 5 6 -1 5 4 -7 7 0 6 -1 1 -6 7 -5

Sample Output
Case 1: 14 1 4 Case 2: 7 1 6

Author
Ignatius.L

Recommend
We have carefully selected several similar problems for you:  1176 1087 1069 1058 1203

if(dp[i-1]>0)
dp[i]=dp[i-1]+a[i];
else
dp[i]=a[i];

#include<stdio.h>
#include<iostream>
#include<math.h>
#include<string.h>
#define N 100010
using namespace std;

int a[N],dp[N];

int main()
{
int T,t=1;
scanf("%d",&T);
while(T--)
{
int n,s,e,i,e1,s1;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);

memset(dp,0,sizeof(dp));
dp[0]=-1001;           //因为序列的最小值为-1000，所以为了确保不会取到dp[0]，就将dp[0]设为-1001
int max1=dp[0];
for(i=1;i<=n;i++)
{
if(dp[i-1]>=0)          //延续就序列，更新终点
{
dp[i]=dp[i-1]+a[i];
e1=i;

}
else
{
dp[i]=a[i];           //新序列，更新起点和终点
{
s1=i;
e1=i;
}
}
if(dp[i]>max1)           //更新最大值和结果
{
max1=dp[i];
s=s1;
e=e1;
}
}

printf("Case %d:\n",t);
printf("%d %d %d\n",max1,s,e);
if(T!=0)
printf("\n");
t++;
}
return 0;
}

• 本文已收录于以下专栏：

## HDU1003 Max Sum 最大子序列和的问题【四种算法分析+实现】

• u012846486
• 2014年05月18日 21:08
• 1542

## 动态规划——Hdu_1003_Max Sum

2012/7/22 11:04 Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...
• code_pang
• 2012年07月22日 12:32
• 6041

## hdu_1003_Max Sum

• ggeh_f
• 2016年01月22日 15:08
• 180

## HDU 1003 Max Sum 最大连续和 分治法

• u012139398
• 2015年01月23日 10:35
• 541

## 杭电 HDU ACM 1003 Max Sum

Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su...
• lsgqjh
• 2015年04月12日 20:45
• 915

## 杭电oj-1003-Max Sum

Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum...
• yeyun666
• 2015年12月09日 14:39
• 795

## 杭电OJ（HDOJ）1003题：Max Sum（动态规划）

• u014174811
• 2014年12月05日 20:36
• 967

## Java - 杭电1003 Max Sum

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submissio...
• qq_34594236
• 2016年05月26日 21:39
• 710

## hdu 1003 Max Sum （贪心）

Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total...
• u013446688
• 2015年01月13日 14:41
• 920

## 杭电1003 maxsum--解题报告

• zhuihunmiling
• 2013年05月28日 14:03
• 2351

举报原因： 您举报文章：HDU 1003 MAX SUM 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)