题目大意:给定一个序列,求出序列的最大连续子序列的和。
典型的DP,就不解释了,dp[i]代表i元素之前最大子序列和的值。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define min -99999999
//DP问题
int sta,end;
int main()
{
int n,i,j,t,sum,maxsum,in,b;
scanf("%d",&n);
for(i=0;i<n;i++)
{
sum = 0;
maxsum = min;
sta = 0;
scanf("%d",&t);
for(b=j=0;j<t;j++) //利用动态转移方程 if(sum<0) sum = 0; else sum = sum +a[i];
{ //同时要不断更新 sum的值,看是否与最大值大,大之,则替换
scanf("%d",&in);
sum += in;
if(sum>maxsum)
{
maxsum = sum;
end = j;
sta = b;
}
if(sum<0)
{
sum = 0;
b=j+1;
}
}
printf("%d\n",maxsum);
}
return 0;
}