HDOJ 1003 Max Sum

这个题做的我脑壳疼,题目并不难,非常简单的动态规划思想就好,该的OJ对输出格式太严格了,我只是case后边的冒号位置不对,让我WA了一下午,蛋都碎了。

马虎要不得啊。

#include<iostream>
using namespace std;
int main()
{
    int T,N;
    int a[100001]={0};
    cin>>T;
    for(int x=1;x<=T;x++)
    {
        cin>>N;
        for(int i=0;i<N;i++)
            cin>>a[i];
        int max=-1001,sum=0;
        int startp=0,endp,c[2]={0};
        for(endp=0;endp<N;endp++)
        {
            sum=a[endp]+sum;
            if(max<sum)
            {
                max=sum;
                c[0]=startp;
                c[1]=endp;
            }
            if(sum<0)
            {
                sum=0;
                startp=endp+1;
            }
        }
        cout<<"Case "<<x<<":"<<endl;
        cout<<max<<" "<<c[0]+1<<" "<<c[1]+1<<endl;
        if(x!=T)
            cout<<endl;
    }
}

上边我的AC代码,做完之后又发现了一个大佬的代码,更简练。不需要申请数组就可以了,又get了。

#include <iostream>
using namespace std;
int main()
{
    int T,N,num,start,end;
    cin>>T;
    for(int k=0;k<T;k++)
    {
            cin>>N;
            int max=-1001,sum=0,temp=1;
            for(int i=0;i<N;i++)
            {
                            cin>>num;
                            sum+=num;
                            if(sum>max)
                            {
                                       max=sum;
                                       start=temp;
                                       end=i+1;
                            }
                            if(sum<0)
                            {
                                     sum=0;
                                     temp=i+2;
                            }
            }
            cout<<"Case "<<k+1<<":"<<endl<<max<<" "<<start<<" "<<end<<endl;
            if(k!=T-1) cout<<endl;
     
    }

代码引用链接

猜你喜欢

转载自blog.csdn.net/wanttifa/article/details/80786113
今日推荐