SSL_2883烽火传递

Posted VL—MOESR

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSL_2883烽火传递相关的知识,希望对你有一定的参考价值。

思路:

很容易退出DP方程: f i = m i n ( f j ) + a i f_i=min(f_j)+a_i fi=min(fj)+ai
其中 i − m ≤ j < i i-m≤j<i imj<i
然后直接用单调队列维护

c o d e code code

#include<iostream>
#include<cstdio>

using namespace std;

int n, m;
int a[101010];
int q[101010], f[101010];

int main()

	scanf("%d%d", &n, &m);
	for(int i=1; i<=n; i++)
		scanf("%d", &a[i]);
	int hd=1, tl=1;
	q[1]=0;
	for(int i=1; i<=n; i++)
	
		while(hd<=tl&&q[hd]<i-m)
			hd++;
		f[i]=f[q[hd]]+a[i];
		while(hd<=tl&&f[i]<=f[q[tl]])
			tl--;
		q[++tl]=i;
	
	int ans=1e9;
	for(int i=n-m+1; i<=n; i++)
		ans=min(ans, f[i]);
	printf("%d", ans);
	return 0;

以上是关于SSL_2883烽火传递的主要内容,如果未能解决你的问题,请参考以下文章

烽火传递dp + 单调队列优化

JDOJ-1056: 烽火传递

烽火传递 NOIP2010初赛 单调队列优化

单调队列优化DP烽火传递 LibreOJ - 10180

Acwing 1089. 烽火传递

烽火传递单调队列优化dp