这一题目是要求连续子序列的最大和,所以在看到题目的一瞬间就想到的是把所有情况列举出来,再两个两个的比较,取最大的(即为更新最大值的意思),这样的思路很简单,但是会超时,时间复杂度为O(n^3),因为有三重for语句
#include<stdio.h> #define maxn 101000 int main() { int ncase,flag=1,n,max,sum=0,h,z,a[maxn]; long i,j,k; scanf("%d",&ncase); while(flag<=ncase) { max=-1001; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); } for(i=0;i<n;i++) { { for(j=i;j<n-1-i;j++) { sum=0; for(k=i;k<=j;k++) sum+=a[k]; if(sum>max) { max=sum; h=i; z=j; } } } } printf("Case %d\n",flag); printf("%d %ld %ld\n",max,h+1,z+1); printf("\n"); flag++; } }
时间: 2024-10-19 03:00:29