hdu 4561 连续最大积

瞎搞的思想:

  在-2出现奇数次的地方,将序列分成两部分;

      注意序列正反各判断一次,去大值;

标准思路DP,未写!

#include<stdio.h>
#include<string.h>
int a[10010];

int main()
{
    int _case,n;
    int i,j,k;

    int ne,po,por,ans,max;
    scanf("%d",&_case);
    for(i=1; i<=_case; i++)
    {
        memset(a,0,sizeof(a));
        scanf("%d",&n);
        for(j=0; j<n; j++)
            scanf("%d",&a[j]);
        ne=0;
        po=0;
        por=0;
        ans=0;
        //max=0;
        for(j=0; j<n; j++)
        {
            //if(a[i]<0)ne++;
            if(a[j])
            {
                if(!ne&&a[j]>0)po++;
                else
                {
                    if(a[j]>0)por++;
                    else ne++;
                }
                if(ne==2)
                {
                    po+=por+2;
                    ne=0;
                    por=0;
                }
                //printf("%d %d\n",po,por);
            }
            else
            {
                if(por>po)po=por;
                if(po>ans)ans=po;
                ne=0;
                po=0;
                por=0;
            }
        }
        if(por>po)po=por;
        if(po>ans)ans=po;
        max=ans;

        ne=0;
        po=0;
        por=0;
        ans=0;
        //max=0;
        for(j=n-1; j>=0; j--)
        {
            //if(a[i]<0)ne++;
            if(a[j])
            {
                if(!ne&&a[j]>0)po++;
                else
                {
                    if(a[j]>0)por++;
                    else ne++;
                }
                if(ne==2)
                {
                    po+=por+2;
                    ne=0;
                    por=0;
                }
                //printf("%d %d\n",po,por);
            }
            else
            {
                if(por>po)po=por;
                if(po>ans)ans=po;
                ne=0;
                po=0;
                por=0;
            }
        }
        if(por>po)po=por;
        if(po>ans)ans=po;
        if(ans<max)ans=max;
        printf("Case #%d: %d\n",i,ans);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/XDJjy/p/3111144.html