HDOJ1231 ( 最大连续子序列 ) 【逆推或动态规划】

类似HDOJ1003
Problem : 1231 ( 最大连续子序列 )     Judge Status : Accepted
RunId : 5938021    Language : C    Author : qq1203456195
Code Render Status : Rendered By HDOJ C Code Render Version 0.01 Beta
 
#include <stdio.h>
#define N 10005
int a[N],b[N],c[N];
int main()
{
    int n,j,tmax,ti,tj,p;
    while(scanf("%d",&n),n)
    {
		p=0;
        for (j=0;j<n;j++)    
		{
			scanf("%d",&a[j]);
			if(a[j]<0)
				p++;
		}
		if(p==n)
		{
			printf("0 %d %d\n",a[0],a[n-1]);
			continue;
		}
        c[n-1]=n-1;
        b[n-1]=a[n-1];
        //注意tmax,ti,tj初始化
        tmax=a[n-1];
        ti=tj=n-1;
        for (j=n-2;j>=0;j--)
        {
            if(b[j+1]>0)    {//这里不能是>=
                b[j]=a[j]+b[j+1];
                c[j]=c[j+1];
            }else{
                b[j]=a[j];
                c[j]=j;
            }
            if(b[j]>=tmax){
                tmax=b[j];
                ti=j;
                tj=c[j];
            }
        }
        printf("%d %d %d\n",tmax,a[ti],a[tj]);
    }
}

 

posted @ 2012-05-13 13:20  ZH奶酪  阅读(515)  评论(0编辑  收藏  举报