zoukankan      html  css  js  c++  java
  • UVa

    题意

    求连续乘积最大值

    思路

    连续子序列有两个要素:起点和终点,因此只需枚举起点和终点即可。由于每个元素的绝对值不超过10且不超过18个元素,最大可能的乘积不会超过1018,可以用long long存储

    对负数的特殊处理 :
    如果遇到乘完某负数后结果变为负数,则应该搜索该遍历区间后面的数还有几个负数,如果没有剩余的负数了( mm == 0 ),之后的乘积一定是负数,也就没有必要继续往后遍历的必要了

    AC代码

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    #define maxn 1000 + 10
    
    int s[maxn];
    
    int main()
    {
        int n, num = 0;
        while( ~scanf("%d",&n) )
        {
            for( int i = 0 ; i < n ; i++ )
                scanf("%d",&s[i]);
            long long a, cheng = s[0];
            for( int i = 0 ; i < n ; i++ )
            {
                int dx = 1;
                a = s[i];
                cheng = a > cheng ? a : cheng;
                int mm = 0; //记录尚未遍历的数中还有多少负数
                for( int j = i+1 ; j < j + dx && j < n ; j++ )
                {
                    a *= s[j];
                    if( a < 0 && s[j] < 0 )
                    {
                        for( int k = j ; k < j + dx && k < n; k++ )
                            mm++;
                        if( mm == 0 ){
                            cheng = a/s[j];
                            break;
                        }
                    }
                    cheng = a > cheng ? a : cheng;
                    dx++;
                }
            }
            cheng = cheng < 0 ? 0 : cheng;
            printf("Case #%d: The maximum product is %lld.
    
    ",++num, cheng);
        }
        return 0;
    }
  • 相关阅读:
    【笔记】二进制文件
    vs2015+64位win10系统ceres-solver编译
    python
    感受函数式编程-scala
    R语言diagram包画订单状态流图
    virtualbox下Centos6.5桥接模式上网配置方法
    配置对IIS上tabular的 HTTP 访问
    centos6.5下逻辑卷操作
    centos6.5下磁盘创建交换分区
    centos6.5下磁盘分区及挂载
  • 原文地址:https://www.cnblogs.com/JinxiSui/p/9740653.html
Copyright © 2011-2022 走看看