烽火传递
来源:互联网 发布:淘宝网男士假发 编辑:程序博客网 时间:2024/04/27 20:34
Description
烽火台又称烽燧,是重要的军事防御设施,一般建在险要或交通要道上。一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息;夜晚燃烧干柴,以火光传递军情,在某两座城市之间有n个烽火台,每个烽火台发出信号都有一定代价。为了使情报准确地传递,在连续m个烽火台中至少要有一个发出信号。请计算总共最少花费多少代价,才能使敌军来袭之时,情报能在这两座城市之间准确传递。
Input
第一行:两个整数N,M。其中N表示烽火台的个数,M表示在连续m个烽火台中至少要有一个发出信号。接下来N行,每行一个数Wi,表示第i个烽火台发出信号所需代价。
Output
一行,表示答案。
Sample Input
5 312562
Sample Output
4
Key To Problem
本题是dp加单调队列优化。f[i]表示当第i个烽火台发出信号,前i个烽火台最少付出的代价。f[i]=min{f[k]}(i-m<=k<=i-1)+w[i]单调队列维护一单调递增区间,每次队首取出最小值。
code
#include<cstdio>#include<cstring>#include<algorithm>#define N 100010#define inf 0x3f3f3f3fusing namespace std;int n,m;int f[N];int que[N];int main(){ scanf("%d%d",&n,&m); int head=1,tail=0; for(int i=1;i<=n;i++) { int w; scanf("%d",&w); while(head<=tail&&f[que[tail]]>=f[i-1]) tail--; que[++tail]=i-1; while(que[head]<i-m) head++; f[i]=w+f[que[head]]; } int ans=inf; for(int i=n;i>n-m;i--) ans=min(ans,f[i]); printf("%d\n",ans); return 0;}
0 0
- 烽火传递
- 烽火传递
- 烽火传递
- 烽火传递
- 烽火传递
- NOIP2010初赛 烽火传递
- 【tyvj1313】烽火传递
- NKOI 2151 烽火传递
- 烽火传递NOIP2010
- 烽火传递 单调队列
- <单调队列>3.烽火传递
- 烽火传递 dp+单调队列
- NOIP2010 烽火传递 队列DP
- 单调队列之烽火传递问题
- 单调队列——烽火传递
- [tyvj1313]烽火传递(单调队列dp)
- tyvj P1313 [NOIP2010初赛]烽火传递
- NKOJ 2151【单调队列】烽火传递 单调队列优化DP
- 转eclipse commit git
- 【Cocos2d入门教程十三】 浅析Cocos2d下3.x与2.x屏幕截图的区别
- 修改linux root密码
- 水--Beautiful Meadow
- OSG视景器四种线程模型(摘自Array《最长的一帧》)
- 烽火传递
- MySQL源码安装
- POJ 1436 Horizontally Visible Segments(区间更新 + 倍增区间)
- 1096:在霍格沃茨找零钱
- linux常用命令一之文件处理命令
- Tomcat的server.xml数据源JDBC配置
- C++ sort()
- 并查集算法的简介与算法实现
- ubuntu下的vim设置配色方案