dp简单递推就行了,不多说了。。。
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<stack>
#include<map>
#include<time.h>
int a[20000],k,i,j,symbol,max=0,b[20000],i1,max1,star,end,star1,end1;
int main()
{
while(scanf("%d",&k)&&k)
{
max=0;
symbol=0;
for(i=0;i<k;i++)
{
scanf("%d",&a[i]);
if(a[i]<0)symbol++;
}
if(symbol==k)printf("0 %d %d\n",a[0],a[k-1]);
else
{
star=a[0];end=a[0];
star1=a[0];end1=a[0];
max1=a[0];
max=0;
for(i=0;i<k;i++)
{
if(max+a[i]>a[i])
{
max=max+a[i];
end=a[i];
}
else
{
max=a[i];
star=a[i];
end=a[i];
}
if(max>max1)
{
star1=star;
end1=end;
max1=max;
}
}
printf("%d %d %d\n",max1,star1,end1);
}
}
return 0;
}
本文介绍了一种使用递归算法解决数组问题的方法,通过简单的递推步骤解决了数组元素的特定计算任务。程序实例展示了如何根据数组元素的正负性进行操作,并在不同情况下输出最大值或边界值。
588

被折叠的 条评论
为什么被折叠?



