TYVJ 1305 最大子序和 烽火傳遞

2021-07-28 20:40:15 字數 1121 閱讀 9732

描述

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

例如 1,-3,5,1,-2,3

當m=4時,s=5+1-2+3=7

當m=2或m=3時,s=5+1=6

第一行兩個數n,m

第二行有n個數,要求在n個數找到最大子序和

乙個數,數出他們的最大子序和

6 4 

1 -3 5 1 -2 3

7

資料範圍:

100%滿足n,m<=300000

用單調佇列維護從開始到[i]範圍內的最小值,總和減去該最小值,就是最大序列和。

1 #include2 #include3

using

namespace

std;

4int n,m,f[300010],p[300010],sum=0,tail,head,x,ans=0;5

intmain()

617 printf("

%d\n

",ans);

18return0;

19 }

烽火傳遞:

給定n個非負整數,選擇其中若干數字,使得每連續k個數中至少有乙個數被選出。 要求選擇的數字之和盡可能小。

據說是noip考試題,但是我沒有在onlinejudge上找到,所以也沒有測評

1 #include2 #include3

#define maxn 1000010

4using

namespace

std;

5int l=0,r=0,n,m,a[maxn],q[maxn*2

],f[maxn];

6int

main()716

int ans=0x7f;17

for(int i=n-m+1;i<=n;i++) ans=min(ans,f[i]);

18 printf("

%d\n

",ans);

19return0;

20 }

相同的地方是兩個題都是單調佇列優化+dp

tyvj1305 最大子序和(單調佇列

時間限制 記憶體限制 評測方式 題目 1000ms 131072kib 標準比較器 local 輸入乙個長度為n的整數序列,從中找出一段不超過m的連續子串行,使得整個序列的和最大。例如 1,3,5,1,2,3 當m 4時,s 5 1 2 3 7 當m 2或m 3時,s 5 1 6 第一行兩個數n,m...

tyvj 1305 最大子序和 dp 單調佇列

時間限制 記憶體限制 評測方式 題目 1000ms 131072kib 標準比較器 local 輸入乙個長度為n的整數序列,從中找出一段不超過m的連續子串行,使得整個序列的和最大。例如 1,3,5,1,2,3 當m 4時,s 5 1 2 3 7 當m 2或m 3時,s 5 1 6 第一行兩個數n,m...

Tyvj1305最大子序和(單調佇列優化dp)

輸入乙個長度為n的整數序列,從中找出一段不超過m的連續子串行,使得整個序列的和最大。例如 1,3,5,1,2,3 當m 4時,s 5 1 2 3 7 當m 2或m 3時,s 5 1 6 第一行兩個數n,m 第二行有n個數,要求在n個數找到最大子序和 乙個數,數出他們的最大子序和 6 4 1 3 5 ...