PAT 1007甲级

题目连接
1.题目分析
题目求最大连续子序列和
有3种方法
(1)暴力求解,3重循环,不推荐,超时

for(int i=0;i<N;i++){
    for(int j=i;j<N;j++){
        for(int k=i;k<j;k++){
        tempsum += num[k];
            if(tempsum>sum){
            sum = tempsum;
            start = i;
            end = j;
            }
        }
    }
}

(2)分析之后,可以看出,a[i,j]=a[i,j-1]+num[j],其中a[i,j-1]在之前已经求出了,所以将3重循环降至2重循环

for(int i=0;i<N;i++){
    thissum =0;
    for(int j=i;j<N;j++){
        thissum += num[j];
        if(thissum>maxsum){
        maxsum = thissum;
        start = i;
        end =j;
        }
    }
}

(3)线性求

for(int i=0;i<N;i++){
    thissum += num[i];
    if(thissum<0){
    tstart = i;
    thissum=0;
    }
    if(thissum>maxsum){
    maxsum=thissum;
    start = tstart;
    end =i;
    }
}

2.题目代码
(1)2重循环

#include <iostream>
using namespace std;
int main(int argc, char *argv[]){
    int N;
    cin>>N;
    int num[N];
    for(int i=0;i<N;i++){
        cin>>num[i];
    }
    int sum =-1,tmp=0,start=0,end=N-1;
    for(int i=0;i<N;i++){
        tmp =0;
        for(int j=i;j<N;j++){
            tmp+=num[j];
            if(tmp>sum){
                sum=tmp;
                start = i;
                end=j;
            }
        }
    }
    if(sum<0){
        sum=0;
    }
    cout<<sum<<" "<<num[start]<<" "<<num[end];
    return 0;
}

(2)1重循环

#include <iostream>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int main(int argc, char *argv[]) {
    int N;
    cin>>N;
    int num[N];
    for(int i=0;i<N;i++){
        cin>>num[i];
    }
    int tempsum=0,sum=-1,templeft=0,tempright=N-1,tempindex=0;
    for(int i=0;i<N;i++){
        tempsum+=num[i];
        if(tempsum<0){
            tempindex=i+1;
            tempsum=0;
        }
        else if(tempsum>sum){
            sum = tempsum;
            templeft = tempindex;
            tempright= i;
        }
    }
    if(sum<0){
        sum = 0;
    }
    cout<<sum<<" "<<num[templeft]<<" "<<num[tempright]<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zhanggirlzhangboy/article/details/81044962
今日推荐