【题目大意】
给定一个序列S,最多18个元素,每个元素的范围都是-10到10,对于这个序列S的所有连续子序列,求这些连续子序列中最大的正积。如果最大的积是负数,答案视为0。
【解法】
两重循环,枚举S所有的子序列
【坑点】
如果是18个10相乘得到10^18,会超出int的范围,所以要用long long类型
【AC代码】
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
int main(){
int N;
long long s[25];
long long ans;
int cas = 1;
while(scanf("%d", &N) != EOF){
for(int i = 0 ; i < N; i++){
scanf("%lld", &s[i]);
}
ans = s[0];
long long term;
for(int i = 0; i < N; i++){
term = s[i];
// printf("term = %lld\n", term);
ans = max(ans, term);
for(int j = i + 1; j < N; j++){
term *= s[j];
// printf("term = %lld\n", term);
ans = max(ans, term);
}
}
if(ans > 0){
printf("Case #%d: The maximum product is %lld.\n\n", cas, ans);
}
else{
printf("Case #%d: The maximum product is 0.\n\n", cas);
}
cas++;
}
return 0;
}