最大连续子序列http://acm.hdu.edu.cn/showproblem.php?pid=1231

来源:互联网 发布:福州三城网络 编辑:程序博客网 时间:2024/05/29 16:54


http://acm.hdu.edu.cn/showproblem.php?pid=1231

#include<stdio.h>
#include<string.h>
#define max(x,y) x>y?x:y
int main()
{
 int i,n,a[10010],dp[10010],begin[10010],max,sign;
 while(scanf("%d",&n),n)
 {
  for(i=0;i<n;i++)
  scanf("%d",a+i);
  memset(dp,0,sizeof(dp));
  memset(begin,0,sizeof(begin));
  for(i=0;i<n;i++)
   if(a[i]>=0)
    break;
  if(i==n)
   printf("0 %d %d\n",a[0],a[n-1]);
  else
  {
   max=a[0];
   sign=0;
   dp[0]=a[0];
   begin[0]=a[0];
   for(i=1;i<n;i++)
   {
    dp[i]=max(dp[i-1]+a[i],a[i]);
    if(dp[i]==a[i])
     begin[i]=a[i];
    else
     begin[i]=begin[i-1];
   }
   for(i=0;i<n;i++)
    if(dp[i]>max)
    {
     max=dp[i];
     sign=i;
    }
   printf("%d %d %d\n",max,begin[sign],a[sign]);
  }
 }
 return 0;
}

0 0
原创粉丝点击