题意:
找出序列S的乘积最大的连续子序列,如果最大的乘积不是正数,输出0. 1 <= n <= 18, -10 <= Si <= 10.
题解:
数据规模小,直接枚举各个子序列,取其最大乘积。
注:UVa OJ的c++11编译器不支持%I64d输出,提交n多次才醒悟,泪。。
# include <iostream>
# include <cstdio>
# include <algorithm>
using namespace std;
const int maxn = 20;
int s[maxn];
int main()
{
int cases = 1, n;
while(cin >> n)
{
for(int i = 0; i < n; ++i)
cin >> s[i];
long long ans = 0;
long long tmp = 1;
for(int i = 0; i < n; ++i)
{
tmp = s[i];
ans = max(ans, tmp);
for(int j = i + 1; j < n; ++j){
tmp *= s[j];
ans = max(ans, tmp);
}
}
printf("Case #%d: The maximum product is %lld.\n\n", cases++, ans);
}
return 0;
}