c语言max sum,杭电 acm 1003 max sum 问题,求解析

杭电 acm 1003 max sum 问题,求解析

这个题我没有思路,就上网上找了一个代码,ac了,但是事实上我还不明白为什么这么做,我主要有两点疑惑:1.为什么代码里要设sum和max的初始值为-1000。2.为什么代码里的

if(sum>=0)

{

kj++;

sum += m;

}

else

{

ki = i;

kj = i;

sum = m;

}

这部分代码要以sum>=0和sum<0为判断条件。

Max Sum

Time Limit: 2000MS Memory limit: 32768K

题目描述

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.

输入

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).

输出

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.

示例输入

2

5 6 -1 5 4 -7

7 0 6 -1 1 -6 7 -5示例输出

Case 1:

14 1 4

Case 2:

7 1 6

21c92f7342edc52acb5684b0b88bdcec.png程序代码:#include

int main()

{

int t,n,i,max,m,sum,ki,kj,k,a,b;

scanf("%d",&t);

for(k=1;k<=t;k++)

{

scanf("%d",&n);

max = -1000;

sum = -1000;

a = b = 1;

ki = kj = 1;

//printf("max=%d sum=%d\n",max,sum); for(i=1;i<=n;i++)

{

scanf("%d",&m);

if(sum>=0)

{

kj++;

sum += m;

}

else

{

ki = i;

kj = i;

sum = m;

}

//printf("ki=%d kj=%d a=%d b=%d sum=%d max=%d\n",ki,kj,a,b,sum); if(max

{

max = sum;

a = ki;

b = kj;

}

//printf("ki=%d kj=%d a=%d b=%d sum=%d max=%d\n\n",ki,kj,a,b,sum,max); }

if(k==1) printf("Case %d:\n%d %d %d\n",k,max,a,b);

else printf("\nCase %d:\n%d %d %d\n",k,max,a,b);

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值