首页 > 其他分享 >第一章 常见优化技巧

第一章 常见优化技巧

时间:2023-02-17 02:44:40浏览次数:29  
标签:技巧 队列 第一章 枚举 端点 悬线 矩形 优化 单调

双指针法

利用单调性优化暴力中最简单的一种方法:按某种顺序枚举问题的一种条件,满足枚举条件的最优解以某种固定的方式变化。

P1102 A-B 数对

排序后从小到大枚举左端点 \(B\),右端点 \(A\) 单调不降,每次向右找到其对应的一段区间即可。

P1638 逛画展

从左往右枚举左端点,每次移动时原左端点那幅画对应的画家在区间中可能没有作品了,此时必须向右移动右端点直至该画家的某一幅画。

P1115 最大子段和

枚举右端点,最优左端点可以做到单调不降,否则先前将向左移动的这部分选入和会更大。

其实就是找前缀和最小的左端点。

空间换时间

顾名思义,当题目空间限制没用完时尽量用它去优化时间总是没问题的。

P7072 「CSPJ2020」直播获奖

直观想法是每次加入一个成绩就排序,显然会超时。

注意到成绩范围很小,会存在大量重复,所以额外用桶记录每种成绩出现的次数即可较快找到分数线。

这其实就是计数排序。

P2671 「NOIP2015」求和

最裸暴力即三重循环枚举 \(x,y,z\)。

注意到 \(y=\frac{z-x}{2}\),所以只需要统计 \(z-x\) 为偶数的情况,并且 \(y\) 对分数计算无影响。

拆式子,从小到大枚举 \(z\),每种颜色都记录两种奇偶性的 \(x\) 的前缀信息即可。

如果放到全局来计算则只需要记录数量和数字和两种信息,节省了一半的空间。

P4147 玉蟾宫

简单介绍一下悬线法。单调栈求解其实也是悬线法,只是过程是一次性的不太形象。

悬线就是从障碍格向下的若干个连续非障碍格,显然每个非障碍格对应唯一悬线末端。

先预处理出每个非障碍格向左向右遇到的第一个障碍格位置,进而处理出每条悬线向左向右能拓展到的最远位置。

最大面积的矩阵的高一定可以对应到一条悬线,否则这个矩阵可以向上拓展变得更高。

单调栈 & 单调队列

单调栈即满足单调性的栈结构,单调队列即满足单调性的队列结构。

这决定了它们的用途。单调栈由于只能在栈顶操作,只能解决下标或其对应信息没有限制的问题,而单调队列则没有这个顾虑。

有两类问题,一类是求下标有限制的区间内最优解,自然用单调队列;另一类是求某一侧第一个更优的位置,自然用单调栈,但这仅仅是单调队列中弹出队尾的那一部分而已。

就比如说求某一侧下标有限制的第一个更优的位置,它也是用单调队列,只不过不常见而已。

单调队列的本质是贪心。

P2866 「USACO06NOV」Bad Hair Day S

不好直接求每头牛能看见几头牛,考虑求每头牛能被几头牛看见。

维护单调递减的单调栈,这样栈中的牛均能看见新进来的牛,不在栈中的牛说明后面有高于它的,肯定看不见。

P1950 长方形

对于一个矩形,我们在它的右下角处将其计入答案。

枚举行,从左往右维护单调不降的单调栈。当栈顶高度大于当前高度时,高出的那部分就不能作为矩形的左上角了,所以应该将其推平。

当然我们并不是直接模拟推平操作,将相同高度合并,额外记录左端点即可。

P2032 扫描

模板。

P2216 理想的正方形

先在行中用单调队列将最值推到矩形最右侧那一列,再在列中用单调队列将最值推到矩形右下角。


作业与例题一同放在团队作业中,再简单也请实现一遍,反正写写也快。

本次内容较为简单,多余时间可以补一下之前 myh 作业中相关部分。

标签:技巧,队列,第一章,枚举,端点,悬线,矩形,优化,单调
From: https://www.cnblogs.com/landsol/p/17128804.html

相关文章

  • R语言梯度提升机 GBM、支持向量机SVM、正则判别分析RDA模型训练、参数调优化和性能比
    阅读全文:http://tecdat.cn/?p=24354最近我们被客户要求撰写关于分析声纳数据的研究报告,包括一些图形和统计输出。在本文中,介绍简化模型构建和评估过程caret包的train ......
  • 深入探索Android 启动优化(七) - JetPack App Startup 使用及源码浅析
    本文首发我的微信公众号:徐公,想成为一名优秀的Android开发者,需要一份完备的知识体系,在这里,让我们一起成长,变得更好~。前言前一阵子,写了几篇Android启动优化的文章......
  • 真正“搞”懂HTTPS协议19之HTTPS优化
    这是本系列的最后一篇了,其实本篇的内容也跟前两篇TLS的握手和优化有关系。其实HTTPS的核心就是TLS的明文握手连接,前两篇我们花了很大的篇幅来聊这些,另外一个就是在TLS......
  • 如何优化 Vue.js 应用程序
    单页面应用(SPAs)当处理实时、异步数据时,可以提供丰富的、可交互的用户体验。但它们也可能很重,很臃肿,而且性能很差。在这篇文章中,我们将介绍一些前端优化技巧,以保持我们的Vue......
  • 一文总结当下常用的大型 transformer 效率优化方案
    前言本文是一篇综述性的博客,探讨总结当下常用的大型transformer效率优化方案。 本文转载自机器之心作者丨LilianWeng欢迎关注公众号CV技术指南,专注于计算机......
  • 关于c++内存优化的方法
    1.使用智能指针shared_ptr<>或者unique_ptr<>此种方法new出来的对象的内存会在超出作用域后自动释放2.使用clear清除列表或者swap清空对象 或者将指针赋值为NULL3.r......
  • 考研人一定要知道的资料打印小技巧
    以前上大学,考研的人不太多,大多数的毕业生都是毕业之后直接就业的,但是现在考研是越来越热了,很多大学生都会选择考研继续深造。不过对于很多考研党来说,自己考研的经费都是很......
  • 阿里一面:你做过哪些代码优化?来一个人人可以用的极品案例
    前言在尼恩读者50+交流群中,尼恩经常指导小伙伴改简历。改简历所涉及的一个要点是:在XXX项目中,完成了XXX模块的代码优化另外,在面试的过程中,面试官也常常喜欢针对提......
  • win10电脑性能优化配置
    win10电脑性能优化设置@目录win10电脑性能优化设置1.桌面图标显示2.win+i2.1“系统”2.1.1专注助手关2.1.2电源和睡眠设置为从不2.1.3存储开2.2网络和Internet2.3......
  • Centos 性能监控技巧
    1.top监控系统进程top命令查看进程时可自定义刷新频率,比较直观用法用法:Usage:top-hv|-bcHiOSs-dsecs-nmax-u|Uuser-ppid(s)-ofield-w[cols][roo......