嗯暴力系列第二題
題面 輸入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;
}