hdu.1003 Max Sum

来源:互联网 发布:淘宝插件看别人数据 编辑:程序博客网 时间:2024/05/21 15:42

http://acm.hdu.edu.cn/showproblem.php?pid=1003

#include<stdio.h>#include<string.h>int main(){    int t,n,i,j,a,k,l;    int sum[100000+10];    int left,right,min,best;    scanf("%d",&t);    for(k=1;k<=t;k++)    {        scanf("%d",&n);        memset(sum,0,sizeof(sum));        for(i=1;i<=n;i++) {scanf("%d",&a); sum[i]=sum[i-1]+a;}//sum存的是以i结束的总和        left=-1; right=-1;        min=100000001; best=-100000001;        for(j=1;j<=n;j++) //以j结尾的子串        {            if(sum[j-1]<min) {min=sum[j-1]; l=j;}//如果当前的sum比min还小,这就意味着这个sum将是遇到的最小sum,这里的sum只会是负的时候才会更新            if(sum[j]-min>best)//如果sum-min比best大就意味着min是个负数,也就意味着他之前也有个负数的序列和            {                best=sum[j]-min;//呢么就应该把这个负数序列和减去!!!                left=l;                right=j;            }        }        if(k==t) printf("Case %d:\n%d %d %d\n",k,best,left,right);        else printf("Case %d:\n%d %d %d\n\n",k,best,left,right);    }    return 0;}


0 0
原创粉丝点击