給你乙個長度為 n 的整數序列 ,要求從中找出一段連續的長度不超過 m 的子串行,使得這個序列的和最大。
第一行為兩個整數 n,m;
第二行為 n 個用空格分開的整數序列,每個數的絕對值都小於100。
僅乙個整數,表示連續長度不超過 m 的最大子串行和。
641
-351
-23
7
對於 30%的資料:1<=n,m<=10,000
對於 60%的資料:1<=n,m<=1,000,000
對於100%的資料:1<=n,m<=10,000,000
維護字首和,對於每乙個字首和s[i],尋找s[i-m]~s[i-1]中最小的那個,用單調佇列維護即可
模板題請見:小雷的早餐
#include
#define m(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define mod 19650827
using
namespace std;
inline
void
read
(int
&x)while
(ch>=
'0'&& ch<=
'9')
if(c==
'-')x=
-x;}
int sum[
10000005
],q[
10000005];
int head=
1,tail=1;
int n,m,i,x,ans=
-2147483647
;int
main()
for(i=
1;i<=n;i++
)printf
("%d\n"
,ans)
;return0;
}
UOJ 304 限長最大連續和
題目描述 給你乙個長度為 n 的整數序列 要求從中找出一段連續的長度不超過 m 的子串行,使得這個序列的和最大。輸入描述 第一行為兩個整數 n,m 第二行為 n 個用空格分開的整數序列,每個數的絕對值都小於100。輸出描述 僅乙個整數,表示連續長度不超過 m 的最大子串行和。樣例輸入 6 41 3 ...
限長最大連續和
給你乙個長度為 n 的整數序列 要求從中找出一段連續的長度不超過 m 的子串行,使得這個序列的和最大。第一行為兩個整數 n,m 第二行為 n 個用空格分開的整數序列,每個數的絕對值都小於100。僅乙個整數,表示連續長度不超過 m 的最大子串行和。6 4 1 3 5 1 2 37對於 30 的資料 1...
最大連續和
這個問題對我來說還挺難的,當初做dp時水過去了,但沒徹底理解,這次打算好好分析一下,爭取徹底搞懂。首先,像 1 1 2 2 3 3 4 4 5 5這樣的數列,想要找連續最大和,可以有很多種方法,從最慢的列舉o n 3 到最快的動態規劃o n 毫無疑問,我們要選擇複雜度低的演算法。所以我這裡就只分析兩...