因为数据结构书上第一个算法分析实例就是这个题,也没怎么仔细看就直接写了,结果老WR,结果才发现书上的只针对Maxsum为正数的时候才适用,负数的时候书上为0,主要题目貌似也没怎么交代清楚,一个不加算不算子序列。不过AC以后才知道不算。
解题代码如下:
#includeint Kesha [100005 ]; int main() { int t , k = 0 ; scanf (%d , &t ); while(t --) { k ++; int n , p = 0 ; scanf (%d , &n ); for(int i =0 ; i <n ; i ++) { scanf (%d , &Kesha [i ]); } int sum = Kesha [0 ], max = Kesha [0 ]; int begin = 0 , end = 0 ; for(int i =1 ; i <n ; i ++) { if(sum + Kesha [i ] < Kesha [i ]) { sum = Kesha [i ]; p = i ; }else { sum = sum + Kesha [i ]; } if(sum > max ) { max = sum ; begin = p ; end = i ; } } printf (Case %d: %d %d %d , k , max , begin +1 , end +1 ); if(t ) printf ( ); } return 0 ; }