HDOJ1003

求解最大子序列的和。

首先子序列的起始元素不一定是从第一个元素开始的。

开始的时候,用的是暴力破解。。。总是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;
}

 

posted @ 2012-03-14 22:59  ZH奶酪  阅读(1588)  评论(2编辑  收藏  举报