题目题意:
最长上升子序列问题。
2 5 6 -1 5 4 -7 7 0 6 -1 1 -6 7 -5
Case 1: 14 1 4 Case 2: 7 1 6
以每个数作为最后一个数考虑,递归找出最大的sum。
AC代码:
#include <iostream>
using namespace std;
int get(int a[],int &start,int &last ,int d)
{
int max = -10000000 ;//max初始为0是会出错的!
start=0 ;
last= 0 ;
int t =1 ;
int mt =0 ;
for(int i=0;i<d; i++)
{
mt = mt +a[i];
if(mt > max)
{
max = mt;
start= t ; last= i+1 ;
}
if(mt < 0)
{
mt=0 ;
t=i+2 ;//再次循环时,start和last又是同一个值了!
}
}
return max ;
}
int main()
{
int num ;
cin >> num ;
for(int k = 1 ; k <= num ;k++)
{
int lg = 0 ;
cin >>lg ;
int * a = new int[lg];//动态数组
for(int i =0 ;i < lg ; i++)
{
cin >>a[i];
}
int start= 0 , last= lg-1 ;
int max = 0 ;
max = get(a,start,last,lg);
cout<<"Case "<<k<<":"<<endl;
cout<<max<<" "<<start<<" "<<last<<endl;
if(k!=num)
cout<<endl;//题目要求每个case之间空一行!
}
return 0 ;
}