1. 程式人生 > >蒜廠年會|計蒜客2019藍橋杯省賽 B 組模擬賽(一)

蒜廠年會|計蒜客2019藍橋杯省賽 B 組模擬賽(一)

int com 搬運 end for ima urn 省賽 stream

技術分享圖片
技術分享圖片

思路一:環形數組拆分成普通數組(通過搬運復制數據到尾部),再求前綴和,找出最大前綴和。因為枚舉了每一個起點 所以最大連續和也一定出現在前綴和中!

思路二:

代碼一:暴力,枚舉數組的起點,環形數組通過把0~起點這段數據搬運到尾部,形成新的數組。再對新數組球前綴和,找出最大的前綴和即可。

#include<iostream>
using namespace std;

int n;
long long arr[20010];
long long s[20010];

int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>arr[i];
    }
    int maxtt = -1;
    int i;
    for(i = 1;i<=n;i++){
        //搬運數據
        for(int j=1;j<i;j++){ 
            arr[n+j] = arr[j];
        }
        int len = n + i;
        //求出最大的連續和(前綴和)
        s[i-1] = 0;
        for(int p = i;p<=len;p++){
            s[p] = s[p-1] + arr[p];
            if(s[p] > maxtt) maxtt = s[p];
        }
        
    }
    cout<<maxtt<<endl;
    return 0;   
} 

蒜廠年會|計蒜客2019藍橋杯省賽 B 組模擬賽(一)