hdu1003 Max Sum

来源:互联网 发布:网络违法犯罪举报 编辑:程序博客网 时间:2024/06/05 09:12
C - Max Sum
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
Submit
 
Status
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 




true:

#include<cstdio>#define mo 100100int n,kai,jie,ma,kk,jj,he;int shu[mo];int main(){int t;scanf("%d",&t);for (int j=1;j<=t;j++){scanf("%d",&n);shu[0]=0;for (int i=1;i<=n;i++)scanf("%d",&shu[i]);he=ma=shu[1];kk=1;kai=1;jie=1;for (int i=2;i<=n;i++){if (he<0){he=shu[i];kk=i;}elsehe+=shu[i];if (he>ma){ma=he;kai=kk;jie=i;}}printf("Case %d:\n",j);printf("%d %d %d\n",ma,kai,jie);if (j!=t)printf("\n");}return 0;}

#include<cstdio>#define mo 100100int n,k;int shu[mo];int chang,kai,jie;int mi,mik,ch;int ma,mk,huo;int main(){int t;scanf("%d",&t);for (int j=1;j<=t;j++){scanf("%d",&n);shu[0]=0;for (int i=1;i<=n;i++){scanf("%d",&k);shu[i]=shu[i-1]+k;}ma=-0x3f3f3f;for (int i=1;i<=n;i++)if (shu[i]>ma){ma=shu[i];mk=i;}mi=0x3f3f3f;for (int i=0;i<mk;i++)if (shu[i]<mi)    {    mi=shu[i];    mik=i;    }chang=shu[mk]-shu[mik];//第一次max;kai=mik;jie=mk;huo=mk+1;while (mk!=n){ma=-0x3f3f3f;    for (int i=huo;i<=n;i++)if (shu[i]>ma){ma=shu[i];mk=i;}    mi=0x3f3f3f;    for (int i=huo-1;i<mk;i++)    if (shu[i]<mi)    {    mi=shu[i];    mik=i;    }    ch=shu[mk]-shu[mik];//再次max;     if (chang<ch)    {    chang=ch;    kai=mik;jie=mk;huo=mk+1;}huo=mk+1;}printf("Case %d:\n",j);printf("%d %d %d\n",chang,kai+1,jie);//Sm-Sn是从n+1到m,if (j!=t)printf("\n");}return 0;}




0 0
原创粉丝点击