ZJOI2010 基站选址 题解

news/2025/1/21 21:35:13/文章来源:https://www.cnblogs.com/dengstar/p/18684481

ZJOI2010 基站选址 题解

题目链接

dp + 线段树优化。

暴力 dp

  • 状态设计:自然想到设 \(f(i, j)\) 表示只考虑前 \(i\) 个村庄,在前 \(i\) 个村庄中建 \(j\) 个基站,并且在第 \(i\) 个存在建立基站时,最小的费用。

  • 转移:转移时,枚举上一个建基站的村庄 \(p\)(这同时告诉我们,\(j = 1\) 时要先初始化,否则无法找到上一个建了基站的村庄):

    \[f(i, j) = c_i + \min_{1 \le p < i} \{f(p, j - 1) + \operatorname{cost}(p, i)\} \]

    其中 \(\operatorname{cost}(p, i)\) 表示在 \(p\)\(i\) 建立基站,而两者之间不建基站的情况下,第 \(p + 1 \sim i - 1\) 个村庄的费用。计算时,要考虑这些村庄是否被基站覆盖,如果被覆盖,则不产生费用,否则第 \(x\) 个村庄产生 \(W_x\) 的费用。

    特别地,当 \(i < j\) 时,\(f(i, j) = +\infty\),表示无法在前 \(i\) 个村庄中建多于 \(i\) 个基站。

  • 初始化:\(f(i, 1)\) 表示只在第 \(i\) 个村庄建基站时,前 \(i\) 个基站的费用。

  • 答案统计:我们不知道建几个基站最优,所以对 \(0 \sim k\) 中的所有建基站的数量,我们都拿它更新答案。需要注意,在状态设计中,\(f(i, j)\) 表示只考虑前 \(i\) 个村庄时的答案,这就少考虑了第 \(i + 1 \sim n\) 个村庄的花费。为此有两种解决方法:

    1. 枚举最后一个村庄的位置 \(i\),统计答案时加上第 \(i + 1 \sim n\) 个村庄的花费。
    2. 假设有一个虚拟的村庄,编号为 \(n + 1\),两个费用都为 \(0\),距离为 \(+\infty\)。dp 时,转移到 \(n + 1\),这样 \(f(n + 1, k + 1)\) 就表示建 \(k\) 个村庄时的总答案。显然这种方法比较简单,这也是 dp 的常用手段:新建一个虚拟的元素,以便统计答案。

转移时,枚举 \(p\),同时维护 \(\operatorname{cost}(p, i)\),这样就做到了 \(O(n^2)\) 的时间复杂度。如何动态维护 \(\operatorname{cost}(p, i)\)?不妨假设 \(p\)\(i - 1\) 向左移动,显然一开始没有村庄需要补偿,而随着 \(p\) 向左移动,一些村庄无法被 \(p\) 覆盖,此时就要加上它的贡献。我们可以对每一个村庄 \(x\),记录它是对于哪些村庄来说,最左边的能覆盖它们的村庄。当 \(p\)\(x\) 移动到 \(x - 1\) 时,就加上这些村庄的补偿费用。

优化

首先,直觉告诉我们,先枚举 \(i\) 再枚举 \(j\) 是没有前途的,因此我们反着来。

考虑用数据结构优化转移时找最小值的过程。一般来说,我们希望把和转移点 \(p\) 相关的值分离出来,也就是把转移方程表示成 \(f(i, j) = g(i) + \min_{1 \le p < i} f(p)\) 的形式。

这里的要点在于把 \(\operatorname{cost}(p, i)\) 表示为只和 \(p\) 有关的量。我自己做这道题时,一直在尝试把这个式子拆开,目的是把 \(p\)\(i\) 分离。这种做法有时是可行的,一段区间的和可以表示成两个前缀和相减。但这道题中的 \(\operatorname{cost}\) 是拆不开的。这里是另一个经典套路:考虑扫描线的思想,把 \(i\) 看作常量。每次 \(i\) 移动时,就更新所有 \(\operatorname{cost}\) 有变化的区间。

具体而言,把 \(f(p, j - 1) + \operatorname{cost}(p, i)\) 看作第 \(p\) 个位置的权值。当 \(i\) 移动到 \(i + 1\) 时,有一部分村庄无法再被 \(i\) 覆盖。如果它同时也不能被 \(p\) 覆盖,那么 \(p\) 的权值就要加上它的补偿费用 \(w\)

对每个村庄 \(x\),定义 \(l_x\)\(r_x\) 分别表示最左边和最右边的能覆盖 \(x\) 的村庄。这显然容易用二分求出。对每个 \(i\),记录有哪些村庄 \(x\) 使得 \(r_x = i\),设这些村庄构成的集合为 \(S_i\)\(i\) 移动到 \(i + 1\) 时,对 \(S_i\) 中的所有村庄 \(x\),使 \(1 \sim l_x - 1\) 的权值加上 \(w_x\),表示这个范围内的村庄无法覆盖 \(x\)。转移时,取 \(1 \sim i - 1\) 的最小权值加上 \(c_i\) 即可。用线段树维护区间加和区间最小值,时间复杂度 \(O(kn\log n)\)

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

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

相关文章

P1183 多边形的面积-向量的用法

原题链接 https://www.luogu.com.cn/problem/P1183 题目描述 给出一个没有缺口的简单多边形,它的边是垂直或者水平的,要求计算多边形的面积。 xOy 的笛卡尔平面上,它所有的边都平行于两条坐标轴之一。然后按逆时针方向给出各顶点的坐标值。所有的坐标值都是整数,因此多边形…

蓄水池漂浮物识别摄像机

蓄水池漂浮物识别摄像机具有高效的图像识别功能。通过高清晰度的摄像头捕捉到蓄水池表面的图像,并通过人工智能技术进行快速准确的漂浮物识别。这种摄像机可以自动检测出池面上的漂浮物,并生成相应报警信息。该摄像机支持多种智能算法分析,并通过智能算法对数据进行综合分析…

行为智能识别摄像机

行为智能识别摄像机通过结合人工智能技术和监控技术,实现了对各种行为动作的自动识别和分析,在提高安全性、减少事故发生率方面具有重要意义。随着科技的不断进步和应用范围的扩大,相信这种先进设备将会在更多领域得到广泛应用。行为智能识别摄像机是一种结合了人工智能技术…

AI人数智能统计监测摄像头

AI人数智能统计监测摄像头具有高效的图像识别功能。通过先进的图像处理算法,可以快速准确地识别出场景中的人群,并进行实时统计。无论是密集的人流场所还是较为稀疏的区域,这种摄像头都能够精准地进行人数统计,为管理者提供重要参考信息。AI人数智能统计监测摄像头具有实时…

Android 中的卡顿丢帧原因概述 - 方法论

Android 手机使用中的卡顿问题 , 一般来说手机厂商和 App 开发商都会非常重视 , 所以不管是手机厂商还是 App 开发者 , 都会对卡顿问题非常重视 , 内部一般也会有专门的基础组或者优化组来进行优化 . 目前市面上有一些非常棒的第三方性能监控工具 , 比如腾讯的 Matrix ; 手机厂…

JavaScript的常用库 —— jQuery

利用JS去操控HTML和CSS,常用库之jQuery ฅʕ•̫͡•ʔฅjQuery用来更加方便地去控制前端的HTML标签和CSS属性。使用方式:1. 直接在<head>元素中添加: <script src="https://cdn.acwing.com/static/jquery/js/jquery-3.3.1.min.js"></script> 2…

2 FreeRTOS移植

2 FreeRTOS移植 2.1 源码基本认识获取源码。官网地址:FreeRTOS™ - FreeRTOS™ 源码内文件结构:1) FreeRTOS文件夹结构2) Source文件夹结构3) portable文件夹结构 portable文件夹里面有编译器、内核环境可以选择。其中keil是我们使用的编译器类型,但Keil文件夹里只有一个…

22蓝帽初赛

参考wp:http://mp.weixin.qq.com/s?__biz=Mzk0MTQzNjIyNg==&mid=2247487196&idx=1&sn=48094c5a78749b45c3598ed51a5df0e3&chksm=c3901b8acd56bc2d1d06b323e9d1e86b90048a35dc3b3301b60bb1f488a764f0b52ebc490113&mpshare=1&scene=23&srcid=01218…

【Azure APIM】APIM服务配置网络之后出现3443端口不通,Management Endpoint不健康状态

如果没有关联的网络安全组,则阻止所有网络流量通过子网和网络接口。问题描述 APIM服务在配置网络之后,查看网络状态发现Management Endpoint是不健康状态, 提示无法连接到3443端口。错误消息: Failed to connect to management endpoint at xxxxxxxx.management.azure-api.…

【模拟电子技术】11-放大电路的性能指标

【模拟电子技术】11-放大电路的性能指标通过输入,输出侧的各一个电容来到输入纯交流,输出纯交流Ui变化引起UBE变化,UBE变化引起IB变化,IB变化引起IC变化,IC变化引起UCE变化,UCE变化引起Uo变化关于输入,输出等效电路的问题: 输入电阻Ri越大越好还是越小越好?当然是越大…

解决 WebSocket 连接断开问题:前端心跳机制的实现与优化

在开发过程中,我们经常会遇到需要实时通信的场景,而 WebSocket 是一种非常合适的技术选择。然而,在实际使用 WebSocket 的过程中,我们可能会遇到连接频繁断开的问题。最近,我在一个项目中就遇到了这样的问题,经过一番探索和优化,终于找到了解决方案,现在与大家分享一下…

图片内存变大

平时我们会经常遇到压缩图片内存的情况,但是需要把图片内存变大的情况有人遇到过吗,接下来就是图片变大术的详细教程!将需要处理的图片放在一个文件夹内(例:图片a.png放在D盘根目录下)win+R输入cmd打开命令控制行在命令控制行输入cd+图片所在的目录,如果是在磁盘根目录直…