当前位置:编程学习 > C/C++ >>

[hdoj1003]maxsum

大致题意:

        输入一个数列,找到从哪个数到哪个数的和最大,即最大子串(区分于子序列)

        输出子串和的最大值已经最大子串开头和结尾的下标,并输出。

        !!!我一开始写的时候定义max=-1,忽略了几个数的和可能比-1还小的可能性。。。。。

[cpp] 
#include<iostream> 
using namespace std; 
int a[100000]={0}; 
 
void main() 

    int t,n; 
    int max=0; 
    cin>>t; 
    for(int j=1;j<=t;j++) 
    { 
         
        cin>>n;        
        int sum=0,temp=0,b=0,e=0; 
        for(int max=-10000,i=0;i<n;i++)//我当时写成-1,调了好久,没想到是这么个错误 
        { 
            cin>>a[i]; 
            if(sum>=0) 
            { 
                sum+=a[i]; 
            } 
            else 
            { 
                sum=a[i]; 
                temp=i; 
            } 
            if(sum>max) 
            { 
                max=sum; 
                b=temp; 
                e=i; 
            } 
        } 
        printf("Case %d:\n",j); 
        printf("%d %d %d\n",max,b+1,e+1); 
        if(j<t) 
            cout<<endl;    
    } 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,