- #include<cstdio>
-
- //问题关键:只要出现正数最大子序列和就不可能为负 ----所以思考问题的时候要注意想一下问题的巧妙之处
- int a[10000];
- int main(){
- int n;
- scanf("%d",&n);
- for(int i=0;i<n;i++){
- scanf("%d",&a[i]);
- }
- int sum=-1;
- int temp;
- int start;
- int end;
- for(int i=0;i<n;i++){
- temp=0;
- for(int j=i;j<n;j++){
- temp+=a[j];
- //最大子序列和的第一个数一定是个正数
- if(temp>sum){
- sum=temp;
- start=a[i];
- end=a[j];
- }
- }
-
- }
- if(sum<0){
- printf("0 %d %d\n",a[0],a[n-1]);
-
- }
- else{
- printf("%d %d %d\n",sum,start,end);
- }
-
- }
cpp运行
知识点:最大子序列和的第一个数一定是个正数
问题关键:只要出现正数最大子序列和就不可能为负 ----所以思考问题的时候要注意想一下问题的巧妙之处