1、题目
Uva 11059
2、题意
输入 n n n 个元素组成的序列 S S S,你需要找出一个乘积最大的连续子序列。如果这个最大的乘积不是正数,应输出0(表示无解)。 1 ≤ n ≤ 18 , − 10 ≤ S i ≤ 10 1 \le n \le 18,-10 \le S_i \le 10 1≤n≤18,−10≤Si≤10。
3、分析
连续子序列有两个要素:起点和终点,因此只需枚举起点和终点即可。由于每个元素的绝对值不超过 10 且不超过 18 个元素,最大可能的乘积不会超过 1 0 18 10^{18} 1018,可以用 long long 存储。
4、代码实现
#include<iostream>
using namespace std;
int main() {
int S[20], kase = 0, n;
while(cin >> n && n) {
for(int i = 0; i < n; i++) cin >> S[i];
long long ans = 0;
for(int i = 0; i < n; i++) {
long long v = 1;
for(int j = i; j < n; j++) {
v *= S[j];
if(v > ans) ans = v;
}
}
cout << "Case #" << ++kase << ": The maximum product is " << ans << ".\n\n";
}
return 0;
}