例题7-2 最大乘积(Maximum Product, UVa 11059)

欢迎访问我的Uva题解目录哦 https://blog.csdn.net/richenyunqi/article/details/81149109

题目描述

例题7-2 最大乘积(Maximum Product, UVa 11059)题目描述

题意解析

输入n个元素组成的序列S,你需要找出一个乘积最大的连续子序列。如果这个最大的乘积不是正数,应输出0(表示无解)。 1 ≤ n ≤ 18 1≤n≤18 1n18 − 10 ≤ S i ≤ 10 -10≤Si≤10 10Si10

算法设计

由于n最大只有18,完全可以采用暴力枚举所有子序列乘积的方式,求出最大结果。

注意点

  1. 由于每个元素的绝对值不超过10且不超过18个元素,最大可能的乘积不会超过 1 0 18 10^{18} 1018,需要用long long存储。
  2. 每个测试样例之后都要输出一个空行

C++代码

#include <bits/stdc++.h>
using namespace std;
int main() {
    
    
    int n,a[20];
    for (int ii = 1; cin >> n; ++ii) {
    
    
        for(int i=0;i<n;++i)
            cin>>a[i];
        long long ans=0;
        for(int i=0;i<n;++i){
    
    
            for(int j=i;j<n;++j){
    
    
                long long p=1;
                for(int k=i;k<=j;++k)
                    p*=a[k];
                ans=max(ans,p);
            }
        }
        printf("Case #%d: The maximum product is %lld.\n\n", ii, ans);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/richenyunqi/article/details/100370019