题目:http://acm.hdu.edu.cn/showproblem.php?pid=1003
题目的大意就是求一个数列中最大的子序列的和,并记录子序列开始与结束的元素在原数列中的位置,最后一起输出
其实就是一个最大子序列问题
题目并不难,但是可以说是入门dp的开始。
下面附上代码:
#include <iostream>
#include <cstring>
using namespace std;
int arr[100005];
int main()
{
int n,m,l;
while(cin>>n)
{
m=n;
l=1;
while(n--)
{
int num;
int temp1=1,temp2=1;//用于记录开始与结束的位置
int i=0;
memset(arr,0,sizeof(arr));
cin>>num;
int max=-99999,a=temp1;
int sum=0;
for(i=0;i<num;i++)
{
cin>>arr[i];
if(sum<0)
{
a=i+1;
sum=0;
}
sum+=arr[i];
if(sum>max)
{
temp1=a;
temp2=i+1;
max=sum;
}
}
if(l<m)
cout<<"Case "<<l++<<":"<<endl<<max<<" "<<temp1<<" "<<temp2<<endl<<endl;
else
cout<<"Case "<<l++<<":"<<endl<<max<<" "<<temp1<<" "<<temp2<<endl;
}
}
return 0;
}