最大子串行和(2種)

2021-08-30 04:16:51 字數 1022 閱讀 8053

時間限制: 1 sec  記憶體限制: 64 mb

輸入乙個長度為n的整數序列(a1,a2,…,an),從中找出一段連續的長度不超過m的子串行,使得這個子串行的和最大。例如:

序列1,-3,5,l,-2,3,

當m = 2或3時,s = 5 + 1 = 6;當m = 4時,s = 5 + 1 +(-2)+ 3 = 7。

第1行乙個整數n表示序列的長度。第2行n個整數,代表序列的元素。第3行乙個整數表示m。

乙個整數,即子串行的最大和。保證結果不超過longint範圍。

6

1 -3 5 1 -2 3

3

6
50%的資料:n,m≤1000;

100%的資料:n,m≤20000。

樸素演算法o(n^2) //耗時3746ms

#include#include#include#include#define ll long long

using namespace std;

ll n,m,a[20100],sum,ans,t;

inline int read()

while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();

return w?-x:x;

}int main()

while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();

return w?-x:x;

}int main()

printf("%d",ans);

}

單調佇列:

dalao:講解

和最大子串行

問題描述 第一行輸入乙個正整數n 1 n 100001 第二行輸入n個整數a 0 a 10000 求該組整數子串行最大的和。解決這個問題應該考慮輸入n較大的情況,也就是說,輸入100000個數字判斷它的和最大子串行應當也能很快地算出來。我看過很多求解的 有三重for迴圈的,有兩重for迴圈的,也有使...

最大子串行和

最大子串行是要找出由數組成的一維陣列中和最大的連續子串行。比如的最大子串行就是 它的和是8,達到最大 而 的最大子串行是,它的和是6。找最大子串行的方法很簡單,只要前i項的和還沒有小於0那麼子串行就一直向後擴充套件,否則丟棄之前的子串行開始新的子串行,同時我們要記下各個子串行的和,最後找到和最大的子...

和最大子串行

時間限制 1 sec 記憶體限制 512 mb 提交 3 解決 3 提交 狀態 討論版 對於乙個給定的長度為n的整數序列a,它的 子串行 的定義是 a中非空的一段連續的元素 整數 你要完成的任務是,在所有可能的子串行中,找到乙個子串行,該子串行中所有元素的和是最大的 跟其他所有子串行相比 程式要求你...