【CF】1216F-WiFi 题解

传送门:1216F
标签:动态规划

题目大意

你是一名宿舍管理员,在一条直走廊上有n 个连续的房间。房间编号从 1 到 n。你需要将所有n 间房连接到互联网。你可以直接将每个房间连接到互联网,第 i 个房间的费用为i 枚硬币。有些房间有路由器的位置。放置第 i 个房间的路由器的费用也是i 枚硬币。不能在一个没有位置的地方放置路由器。当你在第 i 个房间放置路由器时,你会将号码从max(1,i−k) 到min(n,i+k) 包含在内的所有房间连接到互联网,其中 k 是路由器的范围。所有路由器的 k 值相同。计算将所有n 间房连接到互联网的最低总费用。你可以假设拥有路由器数量大于或等于有路由器位置的房间数量。

输入:第一行包含两个整数 n 和 𝑘——房间的数量和每个路由器的范围。第二行是一个长度为 n 的字符串 s,只包含零和一。如果字符串的第 i 个字符等于 “1”,那么第 i 个房间有一个路由器的位置。如果字符串的第i 个字符等于 “0”,则不能在第 i 个房间放置路由器。

输出:打印一个整数——将所有n 间房连接到互联网的最低总费用。

算法分析

  • 设 dp_i 是连接房间 i 到 n-1 所需的总成本(0 编号)。最初 dp_n = 0,所有其他值都是 +∞。如果我们迭代 n-1 到 0 并做出一些转换,最后答案将是 dp_0。
  • 第一个转换最容易:用 dp_{i+1} + i + 1 更新 dp_i(直接连接当前房间)。为了进行其他转换,我们需要携带两个集合 mins 和 vals,以及一个名为 del 的数组,长度为 n。mins 集合携带 dp_{i+1}, dp_{i+2}, …, dp_{i+k+1} 的所有值。最初它携带 dp_n = 0。vals 集合携带覆盖某些房间尾部并覆盖房间 i 的最小成本。del 数组帮助我们有效地携带 vals 集合。
  • 首先,如果 i+k+2 ≤ n,则从 mins 中删除 dp_{i+k+2}。然后从 vals 中删除 del_i 的所有值。然后如果 s_i = ‘1’,则 val 是 mins 的最小值加上 i + 1。用 val 更新 dp_i 并将 val 插入 vals。此外,如果 i-k-1 ≥ 0,请将 val 添加到 del_{i-k-1}。在对当前 i 完成所需的一切之后,将值 dp_k 添加到 mins 集合。算法的总时间复杂度:O(nlogn)。好像还有O(n)的解决方案,但是能过就是好算法。

代码实现

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 5e5 + 5, mod = 1e9 + 7;
int nxt[N];
ll dp[N];
int n,k;
ll cal(int i){if(i < 0)return 0;ll &ret = dp[i];if(~ret)return ret;ret = cal(i-1)+i+1;int best = nxt[max(0,i-k)];if(best<=i+k){ret = min(ret,cal(best-k-1)+best+1);}return ret;
}
int main() {memset(dp,-1,sizeof dp);cin >> n >> k;string s;cin >> s;int cur = 1e9;for (int i = n-1; i >=0 ; --i) {if (s[i] == '1') {cur = i;}nxt[i]=cur;}cout << cal(n-1);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/48494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习实战】数据增强基础

文章目录 1. 数据增强2. 数据增强技巧torchvision2.1 图像大小调整2.2 图像旋转2.3 图像转换为张量2.4 归一化2.5 图像裁剪2.6 仿射变换2.7 透视变换 3. 自动增强4. Mixup增强 1. 数据增强 什么是数据增强&#xff1f;数据增强是优化数据吗&#xff1f;这种说法并不尽然。首先…

Linux复习01

1. Linux应用场景&#xff1a; 互联网公司的服务器后端智能设备的使用嵌入式... 2.Linux商业化版本 a.商业化版本:&#xff08;ubuntu&#xff0c;红帽&#xff0c;centos&#xff09;内核界面等 b.技术版本&#xff08;Linux的内核源代码&#xff09;2.6 2.7等等 内核版…

【2024德国签证】留学面签问题汇总

在去交材料的时候&#xff0c;可能会被随机安排面试。这些面试问题一般都很简单&#xff0c;主要是测试你的基本英文交流能力。无需担心&#xff0c;签证官不会问太专业的问题&#xff0c;因为他们也不懂专业内容。到目前为止&#xff0c;没有一个博士生因为这个面试被拒签。毕…

Golang | Leetcode Golang题解之第239题滑动窗口最大值

题目&#xff1a; 题解&#xff1a; func maxSlidingWindow(nums []int, k int) []int {n : len(nums)prefixMax : make([]int, n)suffixMax : make([]int, n)for i, v : range nums {if i%k 0 {prefixMax[i] v} else {prefixMax[i] max(prefixMax[i-1], v)}}for i : n - 1…

将github上的项目导入到vscode并创建虚拟环境

1、将github上的项目导入到vscode 直接从github上下载到本地&#xff0c;用vscode打开&#xff08;Open file&#xff09; 2、创建虚拟环境 python -m venv <name> <name>\Scripts\activate ps: 1、退出虚拟环境 deactivate 2、如果运行python -m venv <…

Unity格斗游戏,两个角色之间互相锁定对方,做圆周运动

1&#xff0c;灵感来源 今天手头的工作忙完了&#xff0c;就等着服务器那边完活&#xff0c;于是开始研究同步问题。 正好想到之前想做的&#xff0c;两个小人对线PK&#xff0c;便有了这篇文章。 2&#xff0c;要实现的效果 如图所示&#xff0c;两个小人可以互相锁定&…

CARLA源码编译避坑指南

文章目录 前言一、CARLA官方编译教程二、无法拉取Unreal Engine Carla分支三、无法下载CARLA地图包四、osm2odr安装错误五、bdist_wheel错误六、编译结果 前言 之前也搭建过这个CARLA源码编译环境&#xff0c;很多坑&#xff0c;但是没记录下来&#xff0c;这次再搭建还是一样…

Spring Web MVC(一篇带你了解并入门,附带常用注解)

一&#xff0c;什么是Spring Web MVC 先看一下官网怎么说&#xff1a; 也就是Spring Web MVC一开始就是包含在Spring框架里面的&#xff0c;但通常叫做Spring MVC。 也可以总结出一个信息&#xff0c;这是一个Web框架。后面我就简称为Spring MVC了。 1.1MVC MVC也就是Mode…

防火墙--内容安全

目录 概述 IAE引擎流程 DPI深度包检测 基于特征字的检测技术 基于应用网关的检测技术 基于行为模式的检测技术 DFI深度流检测 基于数据流进行识别检测的技术 DPI和DFI对比 IDS&#xff08;入侵检测&#xff09; IPS&#xff08;入侵防御&#xff09; 优势 入侵检测…

AtCoder Beginner Contest 362

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;彩笔ACMer一枚。 &#x1f3c0;所属专栏&#xff1a;Codeforces 本文用于记录回顾总结本彩笔的解题思路便于加深理解。 比赛题目地址&#xff1a;AtCoder Beginner Contest 362 …

周记-2024年第29周-7.15~7.21:还是在工作内耗

现在是周日晚上21:20&#xff0c;我开始写周总结。 上周计划 工作上保持主动性&#xff0c;要有主人翁意识&#xff0c;积极推动事情&#xff0c;有问题就在群里问别人&#xff0c;不要单点沟通。&#xff08;有进步&#xff0c;在群里发言稍微多了一点&#xff0c;看小组长工…

微服务实战系列之玩转Docker(五)

前言 在我们日常的工作生活中&#xff0c;经常听到的一句话&#xff1a;“是骡子是马拉出来遛遛”。目的是看一个人/物是不是名副其实。我们在使用docker时&#xff0c;也要看看它究竟是如何RUN起来的。当面试官问你的时候&#xff0c;可以如是回答&#xff0c;保你“一文通关…

OpenAI因限制举报人权利遭投诉,呼吁监管介入

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

WindowsStore被误删怎么恢复

WindowsStore被误删怎么恢复 如果您在 Windows 上意外删除了 Windows Store&#xff0c;可以通过以下步骤尝试恢复&#xff1a; 1. 使用 PowerShell 进行恢复 Windows Store 是作为应用程序安装的一部分&#xff0c;可以尝试使用 PowerShell 命令来重新安装它。以下是具体步…

在win10上通过WSL和docker安装Ubuntu子系统,并配置Ubuntu可成功使用宿主机GPU

本文主要记录win10系统上,通过WSL的Ubuntu系统以及Docker使用GPU的全部过程。 文章目录 1、 启用hyper-v2、 安装docker3、 安装WSL3.1 安装WSL23.1.1 检查是否安装了WSL23.1.1 安装和配置 WSL 23.2 安装Ubuntu 子系统3.3 检查并修改WSL版本4、docker配置ubuntu20.04 LTS5、下…

Java和Python的图结构如何实现图的深度优先搜索算法

Java和Python的图结构如何实现图的深度优先搜索算法&#xff1f; 在Java和Python中&#xff0c;实现深度优先搜索&#xff08;DFS&#xff09;算法的基本思路都是通过递归或栈来探索图的各个节点。 Java实现DFS&#xff1a;Java import java.util.ArrayList; import java.uti…

InfiniBand网络-赋能高性能计算的卓越引擎

InfiniBand&#xff1a;赋能高性能计算网络的卓越引擎 InfiniBand作为一种先进的内网计算平台&#xff0c;已成为驱动高性能计算&#xff08;HPC&#xff09;、人工智能&#xff08;AI&#xff09;以及超大规模云基础设施演进的核心力量&#xff0c;其展现出无可比拟的性能优势…

bs4模块使用(二)

遍历文档树 怎样从文档的一段内容找到另一段内容? html_doc """ <html><head><title>The Dormouses story</title></head><body> <p class"title"><b>The Dormouses story</b></p>&…

基于SpringBoot+Vue的财务管理系统(带1w+文档)

基于SpringBootVue的财务管理系统(带1w文档) 基于SpringBootVue的财务管理系统(带1w文档) 财务管理系统的开发运用java技术、springboot框架&#xff0c;MIS的总体思想&#xff0c;以及Mysql等技术的支持下共同完成了该系统的开发&#xff0c;实现了财务管理的信息化&#xff0…

Android开机优化系列文档

Android开机优化系列文档 Android系统开机优化系列文档&#xff0c;将与开机优化相关的文档收集在这里&#xff0c;便于管理和查看 Android 14 开机时间优化措施汇总-CSDN博客 Android 14 开机时间优化措施-CSDN博客 根据systrace报告优化系统时需要关注的指标和优化策略-CSD…