欢迎访问我的Uva题解目录哦 https://blog.csdn.net/richenyunqi/article/details/81149109
题目描述
题意解析
输入n个元素组成的序列S,你需要找出一个乘积最大的连续子序列。如果这个最大的乘积不是正数,应输出0(表示无解)。 1 ≤ n ≤ 18 1≤n≤18 1≤n≤18, − 10 ≤ S i ≤ 10 -10≤Si≤10 −10≤Si≤10。
算法设计
由于n最大只有18,完全可以采用暴力枚举所有子序列乘积的方式,求出最大结果。
注意点
- 由于每个元素的绝对值不超过10且不超过18个元素,最大可能的乘积不会超过 1 0 18 10^{18} 1018,需要用long long存储。
- 每个测试样例之后都要输出一个空行
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;
}