7-2 最大乘積(Maximum Product)

嗯暴力系列第二題

題面 輸入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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章