当前位置: 首页 > news >正文

qoj6104 Building Bombing

题意

\(n\) 栋建筑,第 \(i\) 栋建筑的高度为 \(a_i\),一座建筑能从左侧看到仅当它左侧的建筑高度都小于它,问你最少需要爆破几座房子,才能使第 \(l\) 座房子成为能看到的第 \(k\) 高建筑。

\(n\le 10^5,k\le 10\)

思路

首先 \(l\) 要能被看到,因此先把 \(l\) 左边高度大于等于它的全炸了。

由于要求第 \(k\) 高,左边就不用考虑了。

假设 \(l\) 为最左边的建筑,问题就变为了有 \(k\) 栋能看见的建筑需要炸的最小数量。

\(f_{i,j,k}\) 表示第 \([1,i]\) 栋建筑有 \(j\) 栋能看见的建筑,最高的建筑为 \(k\) 需要炸的最少数量。

则有 \(f_{i,j,k}=\min\{f_{i-1,j,k}+[a_k<a_i],f_{i-1,j-1,k'}(k=i,a_k>a_k')\}\),答案即为 \(f_{n,k,k'}\)

\(f\) 的第 \(i\) 维可以使用滚动数组优化。

我们记录下 \(a_i\) 的原始顺序,再把 \(a_i\) 排序,这样对于 \(f_{i,j,k}=f_{i-1,j,k}+[a_k<a_i]\) 就变为了区间加法。

对于 \(f_{i,j,k}=\min\{f_{i-1,j-1,k'}\} \ (k=i,a_k>a_k')\),我们同样可以区间查询最小值。

区间修改求最小值,使用线段树维护 \(f\),可以通过。

http://www.rkmt.cn/news/3776.html

相关文章:

  • Cursor小程序实战系列三: 前后端对接保姆级拆解
  • 课前问题思考2
  • Cursor小程序实战四:如何让AI写好后端代码
  • USACO08 OPEN Roads Around the Farm S (递归)
  • JavaScript生成随机数的方法
  • LiveOS 的制作简介
  • 目标检测 | 基于Weiler–Atherton算法的IoU求解
  • 对比Java学习Go——函数、集合和OOP
  • 【WRF-VPRM 预处理器】HEG 安装(服务器)-MRT专业的工具替代
  • redis实现缓存2-解决缓存穿透,缓存击穿
  • 单克隆抗体人源化:从鼠源缺陷到全人源突破,3 大阶段破解临床应用难题
  • C 语言实现动态数组、链表、栈与队列
  • git reset
  • Brute It -TryHackMe
  • 题解:P12336 第三心脏
  • Spring篇知识点(1)
  • uniapp原生插件 TCP Socket 利用文档
  • 【PyQt5】实现输入延迟响应:3秒无输入后自动读取内容
  • Windows 自带的SSH中配置X11
  • 完整教程:技术小白如何快速的了解opentenbase?--把握四大特色
  • 9.13日模考总结
  • 高斯消元
  • uni-app iOS 性能监控全流程 多器具协作的实战优化指南
  • 十八、CPU的控制流:正常控制流和异常控制流
  • 使用 C# 设置 Excel 单元格格式 - 教程
  • 【ARM Cache 及 MMU 系列文章 6.1 -- Cache maintenance 指令及相关寄存器有哪些?】
  • 每日Java并发面试系列(5):基础篇(线程池的核心原理是什么、线程池大小设置为多少更合适、线程池哪几种类型?ThreadLocal为什么会导致内存泄漏?) - 实践
  • 模仿玩家习惯的简单AI系统:GoCap
  • 浅谈马拉车
  • 十七、异常和中断响应过程的时序图