传送门

题意:有n个房间,需要把n个房间全部连上网,可以使用i的代价直接将第i个房间连上网。有一些房间可以放路由器,代价也是他的标号i,路由器可以使得i-k,到i+k之间所有房间通上网,求最小代价使得全部房间通网。

分析:从1到n+k枚举路由器区间右端点,如果i-k是可以放路由器的房间,可以覆盖到i-2*k到i,那么dp[i]=min(dp[i],dp[j]+i),dp[j]应该为dp[i-2*k-1]到dp[i]之间的最小值。可以用数据结构维护这个最小值,比如单调队列。

#include <bits/stdc++.h>
#define mp make_pair
#define debug(x) cout << #x << ": " << x << endl
#define pb push_back
typedef long long LL;
const int maxn = 4e5 + 10;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
using namespace std;
int n, k;
LL dp[maxn], ans = INF;
char str[maxn];
deque<int> q;
int main() {scanf("%d%d", &n, &k);scanf("%s", str + 1);q.pb(0);for (int i = 1; i <= n + k; ++i) {dp[i] = dp[i - 1] + i;if (i - k >= 1 && str[i - k] == '1') {while (!q.empty() && q.front() < i - 2 * k - 1)q.pop_front();dp[i] = min(dp[i], dp[q.front()] + i - k);}while (!q.empty() && dp[q.back()] >= dp[i])q.pop_back();q.pb(i);}for (int i = n; i <= n + k; ++i)ans = min(ans, dp[i]);printf("%lld\n", ans);
}

View Code

转载于:https://www.cnblogs.com/smallhester/p/11566476.html

codeforces - 1216F WIFI(单调队列+DP)相关推荐

  1. bzoj1791,P4381-[IOI2008]Island【基环树,树形dp,单调队列dp,树的直径】

    正题 评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P4381 题目大意 有n个岛,n条无向边(保证每个岛都有边连到).走过 ...

  2. P3580 [POI2014]ZAL-Freight(单调队列dp)

    P3580 [POI2014]ZAL-Freight(单调队列dp) 考虑两辆车怎么样是最优的. t1,t2,St_1,t_2,St1​,t2​,S t1+St_1+St1​+S 第一辆车:[t1,t ...

  3. Codeforces Round #466 (Div. 2): E. Cashback(单调队列+DP)

    题目链接:http://codeforces.com/contest/940/problem/E 题意:给你一个长为n的序列和一个数字c,你要将这个序列切成若干段,对于每一段,这段中最小的[n/c]个 ...

  4. Codeforces 940E: Cashback 单调队列优化DP

    传送门 题目描述 给你一个长度为n的数列a和整数c 你需要把它任意分段 每一段假设长度为k,就去掉前 ⌊kc⌋\lfloor\frac{k}{c}\rfloor⌊ck​⌋小的数 最小化剩下的数的和 分 ...

  5. 刷题总结——烽火传递(单调队列+dp)

    题目: 题目描述 烽火台又称烽燧,是重要的防御设施,一般建在险要处或交通要道上.一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息:夜晚燃烧干柴,以火光传递军情.在某两座城市之间有 n 个烽火台,每个烽火 ...

  6. POJ 1821 单调队列+dp

    题目大意:有K个工人,有n个墙,现在要给墙涂色.然后每个工人坐在Si上,他能刷的最大范围是Li,且必须是一个连续子区间,而且必须过Si,他刷完后能获得Pi钱 思路:定义dp[i][j]表示前i个人,涂 ...

  7. P3957-跳房子【单调队列,dp,二分】

    前言 链接: https://www.luogu.org/record/show?rid=7915892 这就是之前普及组的第四题- 大意 有n个格子,每个格子有价值.机器人有固定的跳跃距离d,用k个 ...

  8. BZOJ 1791 岛屿(环套树+单调队列DP)

    题目实际上是求环套树森林中每个环套树的直径. 对于环套树的直径,可以先找到这个环套树上面的环.然后把环上的每一点都到达的外向树上的最远距离作为这个点的权值. 那么直径一定就是从环上的某个点开始,某个点 ...

  9. 【CF940E】Cashback(单调队列dp)

    传送门 Solution: 既然是删掉k/c个,那么k<c是不删除的无意义,k=c删除1个,c<=k<2c还是删除1个,那么相当于第c+1个到第k个放在上一区间是无意义的.证明:假如 ...

最新文章

  1. 『奇葩问题集锦』Fedora ubuntu 下使用gulp 报错 Error: watch ENOSPC 解决方案
  2. python写一个ssh工具_用Python写个自动ssh登录远程服务器的小工具
  3. Windows XP和Windows 7双系统安装和启动菜单修复
  4. 译文丨伯克利对serverless的看法:简化云编程
  5. Daily scrum 10.12
  6. C# 异步查询数据库(第二版)
  7. 按下回车键自动切换焦点到下个控件
  8. android 找不到类文件,Android库:当“实现项目”用于库的模块依赖时,找不到类文件...
  9. 关于点击button按钮自动刷新页面导致ajax来不及执行的原因
  10. linux安装vmd软件步骤,VMD软件使用指南.PDF
  11. 什么软件画er图方便_er图绘制工具|er图绘制工具(powerdesigner) v16.5 免费版 - 软件下载 - 绿茶软件园|33LC.com...
  12. 分享一些直播软件的测试点
  13. 冲激响应(impulse response)
  14. jacob不能在Linux系统使用!
  15. CGO arm 树莓pi下的交叉编译
  16. 解决:brew install xxx 时出现“No such file or directory @ rb_sysopen - ”
  17. http的了解、get/post的区别
  18. 移动端图文直播技术方案的分析
  19. Nii转png,Nii转dcm,Dcm转png
  20. Spring Security + SpringBoot + Mybatis-plus实现前后端分离的权限管理系统

热门文章

  1. 【 Element UI 】—Element UI 的基本使用
  2. python serial_python_serial
  3. css 动态rem_HTML + CSS 为何得不到编程界的认可?
  4. 液晶电视发出“嘭”的一声,然后就无法开机了,是什么原因,好不好修?
  5. 活的通透的人,会是一个什么样的人?
  6. 关于直播带货被坑的厂商
  7. 详细解释下头条图文和微头条发布建议
  8. 别看微信,微博,头条用户都很多,自媒体作者也很多
  9. 用DOM方式读取xml
  10. 计算机网络之物理层基本概念