您的位置:首页 > 其它

专题三 Problem A

2016-05-08 12:40 183 查看
一、题目编号:

          1001
二、简单题意:

        给出一个序列a[1],a[2],a[3],…,a
,求从该序列中取出连续一个子段,使这个子段的和最大。
三、解题思路形成过程

         老师上课讲过这个题,思路很清晰。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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: