藍橋杯 ADV 16 演算法提高 和最大子串行

2021-09-01 09:25:28 字數 857 閱讀 2140

問題描述

對於乙個給定的長度為n的整數序列a,它的「子串行」的定義是:a中非空的一段連續的元素(整數)。你要完成的任務是,在所有可能的子串行中,找到乙個子串行,該子串行中所有元素的和是最大的(跟其他所有子串行相比)。程式要求你輸出這個最大值。

輸入格式

輸入檔案的第一行包含乙個整數n,第二行包含n個整數,表示a。

其中1 <= n <= 100000

-10000 <= a[i] <= 10000

輸出格式

輸出僅包含乙個整數,表示你算出的答案。

樣例輸入

5

3 -2 3 -5 4

樣例輸入

4

分析:sum為某一段和,sum=0 從0號開始向前,遇到乙個數字,若該數字加起來不會讓sum變成負數,則加上它,若加起來變成負數的話,就丟掉前面所有的數字,置為0,用maxn記錄sum出現過最大的數字即可~

#include #include using namespace std;

int main() , sum = 0, maxn = 0;

scanf("%d", &n);

for (int i = 0; i <= n; i++)

cout << maxn;

return 0;

}

藍橋杯 ADV 15演算法提高 最大乘積

問題描述 對於n個數,從中取出m個數,如何取使得這m個數的乘積最大呢?輸入格式 第一行乙個數表示資料組數 每組輸入資料共2行 第1行給出總共的數字的個數n和要取的數的個數m,1 n m 15,第2行依次給出這n個數,其中每個數字的範圍滿足 a i 的絕對值小於等於4。輸出格式 每組資料輸出1行,為最...

藍橋杯 ADV 15 演算法提高 最大乘積

演算法提高 最大乘積 時間限制 1.0s 記憶體限制 512.0mb 問題描述 對於n個數,從中取出m個數,如何取使得這m個數的乘積最大呢?輸入格式 第一行乙個數表示資料組數 每組輸入資料共2行 第1行給出總共的數字的個數n和要取的數的個數m,1 n m 15,第2行依次給出這n個數,其中每個數字的...

藍橋杯 ADV 131演算法提高 選擇排序

問題描述 排序,顧名思義,是將若干個元素按其大小關係排出乙個順序。形式化描述如下 有n個元素a 1 a 2 a n 從小到大排序就是將它們排成乙個新順序a i 1 i k 為這個新順序。選擇排序的思想極其簡單,每一步都把乙個最小元素放到前面,如果有多個相等的最小元素,選擇排位較考前的放到當前頭部。還...