【题目大意】
给定一个序列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;
}
本文介绍了一种解决最大连续子序列正积问题的方法。给定一个包含最多18个元素的序列,每个元素范围为-10到10,通过两重循环枚举所有连续子序列,并使用longlong类型来避免整数溢出,最终找出最大正积。
249

被折叠的 条评论
为什么被折叠?



