题目:
题解:
运用单调队列优化dp,结尾大的话就t出去!
代码:
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int f[1000005],a[1000005],que[1000005];
int main()
{
int n,m,i,j,head=0,tail=0;
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++) scanf("%d",&a[i]);
memset(f,0x7f,sizeof(f));
f[0]=0;
for (i=1;i<=n;i++)
{
while (que[head]<i-m && head<=tail) head++;
f[i]=a[i]+f[que[head]];
while (f[que[tail]]>f[i] && head<=tail) tail--;
que[++tail]=i;
}
int ans=100000000;
for (i=n-m+1;i<=n;i++)
ans=min(ans,f[i]);
printf("%d",ans);
}