cf 910A(单调队列优化dp)

简介: cf 910A(单调队列优化dp)

一只青蛙现在在一个数轴上,它现在要从点 11 跳到点 nn ,它每次可以向右跳不超过 dd 个单位。比如,它可以从点 xx 跳到点 x+ax+a ( 1<=a<=d )(1<=a<=d) 。特别的,青蛙只能在有百合花的点上停留。保证点 11 和点 nn 之间有一些点有百合花。请输出青蛙到达点 nn 的最小跳跃次数。


输入输出格式

输入格式

输入的第一行包括两个正整数 nn 和 dd ( 2<=n<=100, 1<=d<=n-1 )(2<=n<=100,1<=d<=n−1) 。 输入的第二行是一个长度为 nn 的无空格字符串,由0和1组成,表示哪些点上有百合花(1表示有)。保证点 11 和点 nn 有百合花。


输出格式

输出青蛙的最小跳跃次数。如果它不可能到达,输出-1。


单调队列优化: O(n)

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <deque>
using namespace std;
const int maxn = 1e5 + 5;
char str[maxn];
int dp[maxn];
int main() {
  int n, d;
  cin >> n >> d;
  cin >> str + 1;
  if (str[1] == '0' || str[n] == '0') {
    cout << "-1" << endl;
    return 0;
  } 
  memset(dp, 64, sizeof(dp));
  dp[0] = dp[1] = 0;
  deque<int> q;
  q.push_back(1);
  int ins = 0;
  for (int i = 2; i <= n; i++) {
    if (str[i] == '1') {
      while (!q.empty() && q.front() < i - d) {
        q.pop_front();
      } 
      if (q.empty()) {
        ins = 1;break;
      }
      dp[i] = dp[q.front()] + 1;
      while (!q.empty() && dp[q.back()] > dp[i]) {
        q.pop_back();
      }
      q.push_back(i);
    }
  }
  if (ins) {
    cout << "-1" << endl;
  } else {
    cout << dp[n] << endl;
  }
  return 0;
}
相关文章
|
存储 数据采集 运维
阿里巴巴DevOps实践指南(二十四)| 智能运维
智能运维( AIOps )是依托于阿里巴巴 DevOps 经验沉淀而来的智能化运维平台,通过运维大数据的积累,以及算法团队多种算法的校对,我们将运维提升到新的高度,通过 AI 来帮我们查看数据、判断异常、决策运维操作,形成监、管、控一体化的运维平台。
阿里巴巴DevOps实践指南(二十四)| 智能运维
|
11月前
|
SQL 关系型数据库 MySQL
如何实现 MySQL 的读写分离?
本文介绍了 MySQL 读写分离的实现方式及其主从复制原理,解释了如何通过主从架构提升读并发能力。重点分析了主从同步延时问题及解决方案,如半同步复制、并行复制等技术手段,并结合实际案例探讨了高并发场景下的优化策略。文章还提醒开发者在编写代码时需谨慎处理插入后立即查询的情况,避免因主从延时导致的数据不一致问题。
1274 44
如何实现 MySQL 的读写分离?
|
机器学习/深度学习 人工智能 运维
智能运维:AI驱动的IT运维革命###
【10月更文挑战第21天】 随着数字化转型的深入,智能运维(AIOps)正逐步成为企业IT管理的核心。本文将探讨AI技术如何赋能运维领域,通过自动化、智能化手段提升系统稳定性和效率,降低运营成本,并分享实施智能运维的最佳实践与挑战应对策略。 ###
1002 1
|
Linux 知识图谱
Centos7安装killall,fuser, killall,pstree和pstree.x11
通过上述步骤,您已在CentOS 7系统中成功部署了killall、fuser、pstree以及pstree.x11,为高效管理系统进程打下了坚实基础。更多关于服务器管理与优化的知识,获取全面技术支持与解决方案。
575 1
|
存储 缓存 负载均衡
带你认识DM 共享存储数据库集群
带你认识DM 共享存储数据库集群
525 3
|
存储 NoSQL Oracle
java 1.8 stream使用总结(个人总结有一些经典文章的集合)(一)
java 1.8 stream使用总结(个人总结有一些经典文章的集合)(一)
229 1
|
Python
Python面试题大全总结
Python面试题大全总结
3069 0
Python面试题大全总结
|
存储 算法
秒懂算法 | BFS与最短路径
搜索包括BFS和DFS,这两种算法是算法竞赛的基础。本篇介绍BFS的扩展应用。
1421 0
秒懂算法 | BFS与最短路径
|
算法 计算机视觉 异构计算
yolo如何画框、如何变换目标检测框的颜色和粗细、如何运行detect脚本
yolo如何画框、如何变换目标检测框的颜色和粗细、如何运行detect脚本
|
Oracle 关系型数据库 Java
thin/oci两种方式连接Oracle数据库
thin/oci两种方式连接Oracle数据库
778 0