作者:louning5257_364 | 来源:互联网 | 2023-10-13 09:08
最大连续子序列,先用递推写了一个,过了
//u1231
#include
#include
#include
using namespace std;
int a[10005];
int main()
{
int n;
while(scanf("%d",&n)&&n!=0)
{
for(int i=0; i {
scanf("%d",&a[i]);
}
int max=-1,now=0,left=a[0],right=a[0],t=a[0],flag=0,ff=0;
for(int i=0; i {
now=now+a[i];
if(flag==1)
{
flag=0;
t=a[i];
}
if(now>max)
{
ff=1;
left=t;
right=a[i];
max=now;
}
if(a[i]<0&&now<0)
{
flag&#61;1;
now&#61;0;
}
}
if(ff&#61;&#61;0)
printf("0 %d %d\n",a[0],a[n-1]);
else
printf("%d %d %d\n",max,left,right);
}
return 0;
}
这部分的动态规划可以把最大值找出来&#xff0c;不过找端点觉得递推省事些
//u1231
#include
#include
#include
using namespace std;
int a[10005],c[10005];
int main()
{
int n;
while(scanf("%d",&n)&&n!&#61;0)
{
for(int i&#61;0; i {
scanf("%d",&a[i]);
}
c[0]&#61;a[0];
for(int i&#61;1;i {
c[i]&#61;max(c[i-1]&#43;a[i],a[i]);
printf("%d\n",c[i]);
}
}
return 0;
}