描述
輸入乙個長度為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 41 -3 5 1 -2 3
7
資料範圍:
100%滿足n,m<=300000
用單調佇列維護從開始到[i]範圍內的最小值,總和減去該最小值,就是最大序列和。
1 #include2 #include3using
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 ...