求解最大子序列的和。
首先子序列的起始元素不一定是从第一个元素开始的。
开始的时候,用的是暴力破解。。。总是TLE。。。
后来在网上找到了参考的公式是:
s[1] = a[1];
s[n] = s[n-1]>=0?s[n-1]+a[n]:a[n];
貌似是一种动态规划,和以前做的背包问题有些类似
#include <stdio.h>
int data[100000];
int main()
{
int i,j,k,l,sum,b,e,max=0,t;
scanf("%d",&i);
for (j=1;j<=i;j++)
{
max = -100000;
scanf("%d",&k);
for (sum=0, l=0, t=0 , e=0;l<k;l++)
{
scanf("%d",&data[l]);
if (sum>=0)
{
sum+=data[l];
}
else
{
sum = data[l];
t = l;
}
if (sum>max)
{
max = sum;
b = t;
e = l;
}
}
printf("Case %d:\n",j);
printf("%d %d %d\n",max,b+1,e+1);
if (j != i)
printf("\n");
}
return 1;
}
本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/03/14/2397044.html,如需转载请自行联系原作者