这道题属于求最大字段和的问题,可以用DP做,也可以枚举,但是枚举时间复杂度为O(n^3)。求解最大字段和详细请看http://blog.csdn.net/u010142538/article/details/9624343
code:
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
#include <queue>
#include <stack>
#include <iomanip>
#include <map>
#define N 999999999
using namespace std;
int a[100005] ;
int start , end ;
int MaxSubItem(int n)
{
int tmp = 0 , max = -N , k = 1 ;
int i ;
for(i = 1 ; i <= n ; i ++)
{
tmp += a[i] ;
if(tmp > max)
max = tmp , start = k , end = i ;
if(tmp < 0)
tmp = 0 , k = i + 1 ;
}
return max ;
}
int main()
{
int t , n , tmp ;
int i , j , p = 1 ;
cin >> t ;
tmp = t ;
while(t --)
{
start = 0 , end = 0 ;
memset(a , 0 , sizeof(a)) ;
cin >> n ;
for(i = 1 ; i <= n ;i ++)
cin >> a[i] ;
int k = MaxSubItem(n) ;
cout << "Case " << p++ << ":" << endl ;
cout << k << " " << start << " " << end << endl;
if((p - 1) != tmp)
cout << endl;
}
return 0;
}