首页 > 其他分享 >积木大赛 类问题学习

积木大赛 类问题学习

时间:2024-12-16 15:43:49浏览次数:9  
标签:积木 大赛 差分 学习 leq 数组 区间 考虑

intro

P1969 [NOIP2013 提高组] 积木大赛

题目描述

春春幼儿园举办了一年一度的“积木大赛”。今年比赛的内容是搭建一座宽度为 \(n\) 的大厦,大厦可以看成由 \(n\) 块宽度为 \(1\) 的积木组成,第 \(i\) 块积木的最终高度需要是 \(h_i\)。

在搭建开始之前,没有任何积木(可以看成 \(n\) 块高度为 \(0\) 的积木)。接下来每次操作,小朋友们可以选择一段连续区间 \([l, r]\),然后将第 \(L\) 块到第 \(R\) 块之间(含第 \(L\) 块和第 \(R\) 块)所有积木的高度分别增加 \(1\)。

小 M 是个聪明的小朋友,她很快想出了建造大厦的最佳策略,使得建造所需的操作次数最少。但她不是一个勤于动手的孩子,所以想请你帮忙实现这个策略,并求出最少的操作次数。

一个全为 \(0\) 的数组,至少多少次区间加 \(1\) 能加出指定数组。

Sol 1

考虑贪心。

只考虑连续非零段,从左往右考虑:

对于第一个数,显然需要相同次数的区间加,不过这些区间加是可以延续的,就是后面还能用。

接下来考虑第 \(i\) 个数:

  • 若 \(a_i>a_{i-1}\),前面延续下来的区间加都能用,还需要额外以它为起点,补充 \(a_i-a_{i-1}\) 个,且都可以延续。
  • 若 \(a_i\le a_{i-1}\),前面延续的区间就可以满足,不需要新增加操作,但是可延续的区间只剩 \(a_{i}\) 个,剩下的必须在上一位截止,之后不能用了。

全部加起来,答案是 \(a_i-a_{i-1}\) 中所有正数的和。

Sol 2

从差分数组考虑,将区间加改成一个加 \(1\) 一个减 \(1\),现在只需要凑出原序列的差分数组。

于是考虑将差分数组的正数和负数一一对应,答案就是差分数组里所有正数的和,也就是 \(\Sigma_{i=1}^{n} \max(a_i-a_{i-1},0)\)。

好的,为啥能一一匹配?

因为差分数组的前缀和就是原数组,这玩意恒 \(\ge 0\),所以任意前缀里 \(+1\) 出现次数大于等于 \(-1\),视作括号序列就能匹配了。

总结

对于区间加来凑出指定数列的问题,考虑从左往右贪心,或者差分数组。

exercise

1. 区间长度大于 \(1\)

CF1943D1 Counting Is Fun (Easy Version)

给一个长度为 \(n\) 的非负整数序列 \(a_i\)。可以进行若干次操作,每次操作选择一对 \(l,r\) 满足 \(1\leq l<r\leq n\),将区间 \(a[l,r]\) 都减去 \(1\)。如果一个序列可以通过若干次操作变成全 \(0\) 数列,则我们认为这个数列是好的。

给定 \(n,k,p\),求所有长度为 \(n\),值域 \(\in[0,k]\) 的序列有多少个是好的,对 \(p\) 取模。保证 \(p\) 是质数。

\(3\leq n\leq 400, 1\leq k\leq n,\sum n^2\leq 2\times 10^5\)。

赛时没见过这个套路,就往把任意长拆为 \(2\) 和 \(3\) 想。

没做出来,估计这么想就已经毁了,但是不排除是当时自己太菜。

Sol 1

考虑发掘合法数组的性质。

从差分数组考虑:

那么类似于上文,用 \(-1\) 匹配 \(+1\),但是这次 \(-1\) 只能匹配 \(i-2\) 位及以前的 \(+1\)。

好的,用 Hall 定理判定是否存在完美匹配。

发现枚举子集不必要,应该是枚举每一个前缀,因为不选满 \(+1\) 不会更少。

所以对于任意 \(i\in[2,n]\) 前 \(i\) 位所有减小于等于前 \(i-2\) 位所有加。

化简为 \(i-1\) 位的减和 \(i\) 位的减 \(\le a_{i-2}\)。

要违背这个式子,\(a_{i-1}>a_{i-2}\) 才有可能,发现充要条件就是 \(a_{i-1}\le a_{i}+a_{i+2}\)。

然后用这个式子做枚举前两位的 \(dp\),前缀和优化即可通过,复杂度 \(n^2k\)。

D2 是其它性质的挖掘,暂时不考虑。

Sol 2

同样:考虑连续非零段。

和上面差不多,但是这里加上对后面一位的限制,为什么呢?

原来(如果 \(a_i>a_{i-1}\))从这位开始的区间必须延续到下一位。

就能更加容易地得出上面的结论了。

2. 区间必须是前后缀

CF2029G 还没写。

标签:积木,大赛,差分,学习,leq,数组,区间,考虑
From: https://www.cnblogs.com/FunStrawberry/p/18573105

相关文章

  • 学习笔记 | OpenCV的安装及其主要模块
    Open Source ComputerVision Library|开源的计算机视觉库官网:https://opencv.org/帮助文档:https://docs.opencv.org/4.x/index.htmlOpenCV是一个完整的计算机视觉处理框架。OpenCV的安装#方式一:cmd命令行安装pip3installopencv-python#方式二:从镜像源下载:pip......
  • Java 基础学习路线
    一、环境搭建与入门(1-2周)安装Java开发工具包(JDK),配置环境变量,确保能够在命令行中正常运行Java命令。选择一款集成开发环境(IDE),如Eclipse或IntelliJIDEA,熟悉其基本操作,包括创建项目、编写代码、调试程序等。学习Java的基本语法,包括变量、数据类型(基本数据类型如in......
  • Vue 前端学习路线
    一、基础阶段(1-2个月)HTML/CSS/JavaScript基础巩固复习HTML标签语义、结构,熟练掌握常见标签如div、span、input、button等的用法,理解块级元素与行内元素的区别与应用场景。深入学习CSS选择器、盒模型、浮动、定位等布局技术,能够实现复杂页面布局,如响应式网页布局,......
  • MySQL锁机制学习随笔
    MySQL锁机制学习随笔锁机制是什么?锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除了传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据......
  • 学习漏洞挖掘不能错过的网站
    1.漏洞数据库CVE(CommonVulnerabilitiesandExposures)网址:CVE-CVE内容:全球漏洞编号的官方标准,记录漏洞基本信息,但具体细节有限。适合:了解漏洞的概述、影响范围和编号,需配合其他资源深入研究。NVD(NationalVulnerabilityDatabase)网址:NVD-Home内容:基于CVE编号扩......
  • 第三章 3.9 在训练过程中修改学习率
    Learning_rate_annealing.ipynb#https://github.com/PacktPublishing/Modern-Computer-Vision-with-PyTorch#https://github.com/PacktPublishing/Modern-Computer-Vision-with-PyTorch###################ChapterThree########################################......
  • 免费送源码:Java+springboot+MySQL springboot古诗文学习系统 计算机毕业设计原创定制
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,古诗文学习系统当然也不能排除在外。古诗文学习系统是以实际运用为开发背景,运用软件工程原理和开发方法,采用springboot技术构建的一个管理系统。整个开发过......
  • 强化学习:人形机器人 —— soft-q-leanring的官方实现的配置环境
    项目源码地址:https://github.com/rail-berkeley/softlearningmujoco版本为200,地址:https://www.roboti.us/download.htmlpython版本3.8具体配置环境如下:(softlearning)root@I1e4c53bdf900b01340:~/softlearning#piplistPackageVersionLo......
  • 【机器学习与数据挖掘实战】案例03:基于k近邻算法的非侵入式电力负荷监测与分解的电力
    【作者主页】FrancekChen【专栏介绍】⌈⌈⌈机器学习与数据挖掘实战案例⌋......
  • 前端工程化_构建工具和脚手架_学习笔记
    前文都是对代码级别的转换,下面是工程级别的转换开发和维护的代码jsx、sass和运行时需要的代码不一致所以需要转换,做转换的工具就叫做构建工具打包之后的代码就完全脱离了开发环境哪种工程更适合开发和维护哪种工程更适合运行如何转换(打包)构建工具就是解决上述三个......