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;
}
复制代码

 


本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/03/14/2397044.html,如需转载请自行联系原作者

相关文章
HDOJ 2802 F(N)
HDOJ 2802 F(N)
102 0
HDOJ 2802 F(N)
HDOJ 1412 {A} + {B}
HDOJ 1412 {A} + {B}
127 0
|
Java 数据安全/隐私保护
HDOJ 2100 Lovekey
HDOJ 2100 Lovekey
104 0
HDOJ 2041 超级楼梯
HDOJ 2041 超级楼梯
109 0
HDOJ 2004 成绩转换
HDOJ 2004 成绩转换
99 0
|
人工智能 Java BI
|
Java
HDOJ 1715 大菲波数
Problem Description Fibonacci数列,定义如下: f(1)=f(2)=1 f(n)=f(n-1)+f(n-2) n>=3。 计算第n项Fibonacci数值。 Input 输入第一行为一个整数N,接下来N行为整数Pi(1
869 0
HDOJ 2050 折线分割平面
Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。
997 0