嗯暴力系列第二题
题面 输入n个元素组成的序列,求其中连续子序列能组成的最大乘积。
值得一提的是这道题数据范围很小 n<=18,序列里每个数绝对值不超过10,所以暴力是完全行得通的。
大致想法就是枚举每一种可能的乘积,然后用贪心更替的办法找到最大值。
注意 要开longlong,int放不下10^18。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[20],n;
long long b[20],maxx;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
b[i]++;
}
long long x=1;
// memset(b,1,sizeof(b));
for(int head=1;head<n;head++)//注意这里是小于不是小于等于
{
for(int tail=head+1;tail<=n;tail++){
int ii=head;
while(ii<=tail){
x*=a[ii];
ii++;
}
if(x>maxx) maxx=x;
x=1;//贪心
}
//以上遍历了所有可能情况,现在只需要求最大值就可以了
// for(int j=1;j<=n;j++){ (原计划,但为了节约空复放弃了)
// if(b[j]>maxx) maxx=b[j];
// }
}
cout<<maxx<<endl;
}