输入n个元素组成的序列S,你需要找出一个乘积最大的连续子序列。如果这个最大的乘积不是正整,应输出-1(表示无解)。1≤n≤18,-10≤Si≤10。
样例输入:
3
2 4-3
5
2 5-1 2 -1
样例输出:
8
20
【分析】
连续子序列有两个要素:起点和终点,因此只需要枚举起点和终点即可。由于每个元素的绝对值不超过10,一共又不超过18个元素,最大可能的乘积示会超过1018,可以用long long存下。
#include<stdio.h> int max=-100; int main() { int n; int a[100]; int ans=1; for(int i=0;i<n;i++) scanf("%d",&a[i]); for(int i=0;i<n-1;i++) { ans=1; for(int j=i;j<n-1;j++) { ans=ans*(a[j]*a[j+1]); if(ans>max) max=ans; ans/=a[j+1]; } } }