4 solutions

  • 4
    @ 2021-10-18 1:25:18

    题解

    子序列最大和倒是挺好做的,关键就在那两个起始位置不容易找到,然后直接代码

    代码

    #include<bits/stdc++.h>
    #include<algorithm>
    using namespace std;
    int main(){
    	std::ios::sync_with_stdio(false);
    	int n,sum=0,ma=INT_MIN;
    	cin>>n;
    	int a[n+5],b=1,e=1,m=1;//m很关键哈
    	for(int i=1;i<=n;i++){
    		cin>>a[i];
    		sum+=a[i];
    		if(ma<sum){//先进行这项,以免全部元素都是负数的时候能存进ma,
    			ma=sum;
    			b=m;//最大值改变,下标记得调整
    			e=i;
    		}
    		if(sum<0){
    			sum=0;
    			m=i+1;//记录起始位置下标,根据第一个if来调整
    			if(m==n+1) m=n;
    		}
    	}
    	cout<<b<<endl;
    	cout<<e<<endl;
    	cout<<ma<<endl;
    	return 0;
    }
    

    Information

    ID
    77
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    8
    Tags
    # Submissions
    326
    Accepted
    47
    Uploaded By