题目:
题解:
运用单调队列优化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);
}
本文介绍了一种使用单调队列来优化动态规划算法的方法,该方法能够有效地处理区间最值问题,通过维护一个单调递减的队列,实现快速找到当前区间的最小值,从而加速动态规划过程。
&spm=1001.2101.3001.5002&articleId=71583915&d=1&t=3&u=7aab631806a04d5ebd99bcdf6cf49276)
744

被折叠的 条评论
为什么被折叠?



