1.最长子序列
比如:给定几个数,求最大的和,那么就是求他的最长子序列,那么可以通过一边输入一边求最大和的方法进行求解
for(i=1;i<=N;i++)
{
cin>>a[i];
t[i]=max(t[i-1]+a[i],a[i]);
}
例题:Max Sum
http://acm.hdu.edu.cn/showproblem.php?pid=1003
题解代码如下:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
int a[100030],t[200030],N,T,i,j,maxt,l,r,k=1,sum;
cin>>T;
while(T--)
{
l=r=1;maxt=-1001;sum=0;
memset(a,0,sizeof(a));
memset(t,0,sizeof(t));
cin>>N;
for(i=1;i<=N;i++)
{
cin>>a[i];
t[i]=max(t[i-1]+a[i],a[i]);
if(t[i]>maxt){maxt=t[i];r=i;}
}//一边输入一边最大和
for(int i = r ; i >= 1 ; i--)
{
sum+=a[i];
if(sum == maxt)
{
l=i;