hdoj 1003 Max Sum

Max Sum

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 11   Accepted Submission(s) : 5

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

#include<stdio.h>
#include<string.h>
#define MAX 100000+10
#define INF 0x3f3f3f
int main()
{
	int n,m,j,i,k1,k2,t,sum;
	int x,y,sum1;
	int s[MAX];
	scanf("%d",&t);
	m=1;
	while(t--)
	{
		memset(s,0,sizeof(s));
		scanf("%d",&n);
		for(i=0;i<n;i++)
	    {
	    	scanf("%d",&s[i]);
	    }
	    x=y=k1=k2=0;
	    sum=s[0];
	    sum1=sum;
	    for(i=1;i<n;i++)
	    {
	    	if(sum>=0)
	    	{
	    		y=i;
	    		sum+=s[i];
	    	}
	    	else
	    	{
	    		x=i;
	    		y=i;
	    		sum=s[i];
	    	}
	    	if(sum>sum1)
	    	{
	    		sum1=sum;
	    		k1=x;
	    		k2=y;
	    	}
	    }
	    printf("Case %d:\n",m++);
	    printf("%d %d %d\n",sum1,k1+1,k2+1);
	    if(t!=0)
	    printf("\n");
	}
	return 0;
}

  

时间: 2024-10-03 23:10:14

hdoj 1003 Max Sum的相关文章

hdoj 1003 Max Sum 【最大子段和】【贪心】

题意:... 策略:看着像贪心,感觉也是贪心. 很久之前做的,又做了一遍,好题. 代码: #include<stdio.h> #include<string.h> int s[100005]; int main() { int t, i, j, l, st, en, n, v = 1; scanf("%d", &t); while(t --){ scanf("%d", &n); for(i = 1; i <= n; i

最大子序列和 HDOJ 1003 Max Sum

题目传送门 1 /* 2 题意:求最大连续子序列和及两个端点 3 累积遍历算法 O(n):依照sum<0将序列分块,最值在某一块上产生.dp也是同样的思路:dp[i] = max (dp[i-1] + a[i], a[i]) 其实是一样的 4 1003就这么难?? 5 详细解释 6 */ 7 /************************************************ 8 * Author :Running_Time 9 * Created Time :2015-8-10

HDOJ 1003 Max Sum【MSS】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 158875    Accepted Submission(s): 37166 Problem Description Given a sequence a[1],a[2

Hdoj 1003.Max Sum 题解

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

HDOJ 1003 Max Sum(dp)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 思路分析:该问题为最大连续子段和问题,使用动态规划求解: 1)最优子结构:假设数组为A[0, 1, 2,….., n],在所有的可能的解中,即解空间中找出所有的解,可以知道,所有的解都为以A[j](j = 0, 1, …, n) 为尾的连续子段,则假设dp[j]表示以在数组A[1, 2, …, j]中以A[j]结尾的字段的最大的和,我们就可以刻画子空间中的所有解的特征:如果 dp[j] > 0

杭电 1003 Max Sum

http://acm.hdu.edu.cn/showproblem.php?pid=1003 Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 142781    Accepted Submission(s): 33242 Problem Description Given a sequence a[1],a[2],a[3

HDU 1003 Max Sum 最大连续子序列的和

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

[ACM] hdu 1003 Max Sum(最大子段和模型)

Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 135262    Accepted Submission(s): 31311 Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max s

HDU 1003 Max Sum(dp,最大连续子序列和)

Max Sum 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