UOJ 304 限長最大連續和

2022-05-23 10:03:06 字數 1009 閱讀 8781

【題目描述】:

給你乙個長度為 n 的整數序列 ,要求從中找出一段連續的長度不超過 m 的子串行,使得這個序列的和最大。

【輸入描述】:

第一行為兩個整數 n,m;

第二行為 n 個用空格分開的整數序列,每個數的絕對值都小於100。

【輸出描述】:

僅乙個整數,表示連續長度不超過 m 的最大子串行和。

【樣例輸入】:

6 41 -3 5 1 -2 3

【樣例輸出】:

7【時間限制、資料範圍及描述】:

對於 30%的資料:1<=n,m<=10,000

對於 60%的資料:1<=n,m<=1,000,000

對於100%的資料:1<=n,m<=10,000,000

本題可以先求乙個字首和,然後用單調佇列對字首和陣列進行維護,最後更新答案即可。

code:

#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

const int n=10000005;

long long n,m,ans,a[n],sum[n];

struct nodeq[n];

void read(long long &x)

while(ch>='0' && ch<='9')

if(c=='-')x=-x;

} int main()

int head=1,tail=1;

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

while(head<=tail&&sum[i]q[++tail].identity=i;

ans=max(ans,sum[q[tail].identity]-sum[q[head].identity]);

} printf("%lld\n",ans);

return 0;

}

304 限長最大連續和

給你乙個長度為 n 的整數序列 要求從中找出一段連續的長度不超過 m 的子串行,使得這個序列的和最大。第一行為兩個整數 n,m 第二行為 n 個用空格分開的整數序列,每個數的絕對值都小於100。僅乙個整數,表示連續長度不超過 m 的最大子串行和。641 351 237對於 30 的資料 1 n,m ...

限長最大連續和

給你乙個長度為 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 毫無疑問,我們要選擇複雜度低的演算法。所以我這裡就只分析兩...