您的位置:首页 > 其它

[TyvjP1313] [NOIP2010初赛]烽火传递(单调队列 + DP)

2017-05-15 11:32 281 查看

传送门

 

就是个单调队列+DP嘛。

 

——代码

#include <cstdio>

const int MAXN = 1000001;
int n, m, h = 1, t = 1, ans = ~(1 << 31);
int q[MAXN], a[MAXN], f[MAXN];

inline int min(int x, int y)
{
return x < y ? x : y;
}

int main()
{
int i;
scanf("%d %d", &n, &m);
for(i = 1; i <= n; i++) scanf("%d", &a[i]);
for(i = 1; i <= n; i++)
{
while(h <= t && q[h] < i - m) h++;
f[i] = f[q[h]] + a[i];
while(h <= t && f[q[t]] > f[i]) t--;
q[++t] = i;
}
for(i = n - m + 1; i <= n; i++) ans = min(ans, f[i]);
printf("%d\n", ans);
return 0;
}
View Code

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: