专题三 Problem A

来源:互联网 发布:php中文手册 下载 编辑:程序博客网 时间:2024/05/16 12:52
一、题目编号:
          1001
二、简单题意:
        给出一个序列a[1],a[2],a[3],…,a[N],求从该序列中取出连续一个子段,使这个子段的和最大。
三、解题思路形成过程
         老师上课讲过这个题,思路很清晰。sum表示当前所算序列的和,maxsum表示序列的最大和。边循环输入边判断,如果当前的和小于0,就放弃这个序列,否则就加上当前数,比较这个当前序列的和,maxsum,当前序列的和大于maxsum则将当前序列的和赋值给maxsum,最终输出maxsum即可。
四、感想
         思路老师讲过了,并不难。重点是输出的格式!!感觉代码都对了,但是每次提交都是wa,改了n遍啊,,最终终于发现是输出格式的问题,晕。。
五、AC代码
#include<iostream>
using namespace std;
int main()
{
    int t,n,a[100001],x,y,e;
    long long maxsum,sum;
    int k=1;
    cin>>t;
    while(t--)
    {
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            if(i==1)
            {
                sum=maxsum=a[i];
                e=x=y=i;
            }
            else
            {
                if(sum<0)
                {
                    sum=a[i];
                    e=i;
                }
                else
                    sum=sum+a[i];

            }
            if(sum>maxsum)
            {
                maxsum=sum;
                x=e;
                y=i;
            }
        }
        cout<<"Case"<<" "<<k++<<":"<<endl;
        cout<<maxsum<<" "<<x<<" "<<y<<endl;
        if(t>0)
            cout<<endl;
    }
    return 0;
}

0 0