zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    java基础知识——7.断点调试与数据加密
    Hibernate最基础配置的记忆方式
    Redis集群命令
    VMware Workstation下centos的使用
    Redis入门
    Shell脚本
    使用Java遇到的问题
    使用Linux
    压缩包安装MySQL服务
    安装windows+ubuntu双系统
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3111144.html
Copyright © 2011-2022 走看看