BZOJ1113 海报PLA1(单调栈入门题)
一,自己思考下
1,先自己思考下
N个矩形,排成一排,现在希望用尽量少的海报去cover住它们。
2,不懂。
着实不懂。
3,分析下,最优性问题对吧,然后就每什么想法了。。
虽然肯定和单调栈和单调队列有啥关系来着。
二,听课
1,由图观察得知,至少有一栋楼是被完全覆盖的
2,覆盖的楼不整齐的话必然不优,这人费曼肯定没学,好!!
3,f[i]表示将第i栋楼完全覆盖,并以该房屋的高度将广告向左延申的最大距离
为啥向左,就是我们来的方向呢》因为左右对称??
4,什么倒着左边右边也一样?
从左往右一遍,
从右往左一遍,
两边加起来,就是可以延申的最大距离?》
5,f数组时干啥的
6,什么时候 会学习一个东西不容易懂?我们该如何让东西变得容易学?
那么为什么要容易学?不容易学 你就学不下去,你就颓了。。。
所以我现在再干什么?我在学算法。我在学编程,程序题。
是抽象的,但是,什么是抽象?什么是具体?
为什么大家说抽象的不容易学习?先回答什么是抽象的吧?
额,先回答什么是具体吧,具体也许就是。。你能看的见的意思。
抽象,,那就是看不见的东西喽。
这是我从百度上荡得,抽象是指从具体事物抽出、概括出它们共同的方面、本质属性与关系等,而将个别的、非本质的方面、属性与关系舍弃的思维过程。 [1]
caonima,别吹np了,
赶紧怎么想想怎么能快乐得写完这题。
怎么能快乐地学习代码???
我来总结下代码学习,都基本靠题目,然后都基本靠代码,然后都基本靠些enough或者not enough的垃圾注释。
所以你的总结是?不管学啥,想要轻松,你就提前先预习,
所以对于海报这个题,我觉得先预习
你需要一本教材来带领你。
7,关于这道题的思路。
或者好多题的思路,总归是一个优化题。
题目如下:
现在希望用尽量少的矩形海报Cover住它们;
你要学会转化题意,不就是问你最小的海报数么?
最小的海报数你肯定不知道呗,但是转化下最大的海报数你知道嘛?
我知道。。n个建筑物肯定n个啊.(这里就不要杠了。。我估计有不少人会挂在这里)
然后其实就转化成一个优化问题了。而优化问题,说白了不就是让你找个破规律啥的呗。
嗯所以别人给我的臭规律是
8,所以在这里我们可以总计一下做题的技巧。
①先看题,你要学会转化题意,抽象出题意来。或者转化成你能理解的问答方式。
9,
嗯嗯,我咋还是不懂?
来,我来正常地认真看一遍这东西。
这个时候再听至少有一个楼被覆盖就容易懂了?(感觉核心是之前不专注而导致效率不高把?)
再往下看就直接懂了,所以说预习是很重要的。(其实 是变相地增加学习时间)
至于左右,反正你右边肯定不行,因为都是未知的啊。
对噢,左右做又懂了,所以关键是之前不 专注啊。。
两边加起来确实就是你可以向两边延申的距离。
其实这题还有些限定,就是之前说的应该说成每栋楼是被完全覆盖的才是最优的。
同时我好像懂了为什么。
别扯这么多,show me the code.
我感觉这题这思想再入门哪里见过。
为什么要维护栈内单调性呢?
10,还不如从高度差讲起。
在我限定各栋楼被单独覆盖住才算最优的话,
x个高度差,x个海报。
一旦有相同的,就可以减了。
那么我们直接存所有的,看有多少个高度差相同的不就完了。
额。。果然有些人和我思想一样,但是这个数据范围。。。呵呵
11,有个人题解我觉得挺好的额
偷一下它的结论,
这是一道单调栈的经典入门例题.
所谓单调栈,就是维护一个单调递增或递减的栈(可以是严格递增递减,也可以不严格).
对于这道题,我们可以很轻易的发现可能答案的最大值是n,即建筑数量.然后进行了一波瞎几把猜测观察,我们又可以发现好像出现了高度相等的建筑,那么答案就要减一.(建筑宽度一斤已经被我们踢到了一边)
啊!水题!这也配得上绿题看我秒切!
然后你绞尽了脑汁你也想不出来怎么用简单的做法把这个 1≤di,wi≤1 000 000 000给搞定
最后你在错误的道路上越走越远......
时光倒流到你刚看到这道题的时间点.你的思路一开始走偏了,但是突然瞥见题目难度之后的一抹绿色,你眉头微皱,嘴中喃喃细语.
(跳过以下的一万字)
单调栈听上去似乎有一些抽象,那么我们从一些样例入手.(输入的都是高度,宽度已经被踹到了一旁瑟瑟发抖)
输入 1 2 3 2 1 输出 3
输入 2 3 1 3 1 输出 4
输入 4 5 2 5 4 输出 5
困惑.明明每组数据都是有两对相等的,为什么输出结果不同?
容易观察得出,样例1中的一对相等数1,1,他们中间的所有数都不比他们小,另一对2,2,中间的数也不比他们小;对于样例2,相等数对3,3,中间的1比他们小,而1,1,中间的3比他们大;对于样例3,数对4,4,中间有一个2比他们小,5,5同理。
据此我们可以瞎几把猜想推断出,每有一对相等数,他们中间所有数都比他们大,那么就可以少用一张海报.可是怎么实现呢?
这时候自然要请出我们的单调栈了。该题维护的是一个单调不递减的栈(因为如果有一个不单调不递减就不能满足我们推断出的结论)。
12,
大家的代码基本都差不多。
给自己点空想时间。
BZOJ1113 海报PLA1(单调栈入门题)的更多相关文章
- Bad Hair Day POJ - 3250 (单调栈入门题)
Some of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a bad hair day! Since each cow is self-cons ...
- POJ 3250 Bad Hair Day【单调栈入门】
Bad Hair Day Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 24112 Accepted: 8208 Des ...
- [Usaco2006 Mar]Mooo 奶牛的歌声(单调栈裸题)
1657: [Usaco2006 Mar]Mooo 奶牛的歌声 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 961 Solved: 679[Submi ...
- hdu1506 直方图中最大的矩形 单调栈入门
hdu1506 直方图中最大的矩形 单调栈入门 直方图是由在公共基线对齐的矩形序列组成的多边形.矩形具有相同的宽度,但可能具有不同的高度.例如,左侧的数字显示了由高度为2,1,4,5,1,3,3的矩形 ...
- poj3250(单调栈模板题)
题目链接:https://vjudge.net/problem/POJ-3250 题意:求序列中每个点右边第一个>=自身的点的下标. 思路:简单介绍单调栈,主要用来求向左/右第一个小于/大于自身 ...
- poj2559/hdu1506 单调栈经典题
我实在是太菜了啊啊啊啊啊 到现在连个单调栈都不会啊啊啊 写个经典题 #include<cstdio> #include<algorithm> #include<cstri ...
- bzoj 1113 [Poi2008]海报PLA 单调栈
[Poi2008]海报PLA Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1304 Solved: 896[Submit][Status][Dis ...
- POJ 2796:Feel Good 单调栈经典题
Feel Good Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 11626 Accepted: 3212 Case T ...
- Largest Rectangle in a Histogram(hdu1506,单调栈裸题)
Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
随机推荐
- Python中的sync和wait函数的使用
转自这篇博文,备忘: https://blog.csdn.net/Likianta/article/details/90123678 https://www.cnblogs.com/xinghun85 ...
- 华为云实战开发】5.如何快速创建免费Git代码仓库【华为云技术分享】
1 文章目的 本文主要帮助已经掌握或者想要掌握Git的开发者,如何更好的应用Git,以及更好的将Git与DevCloud结合应用. 2 概述 2.1 版本控制系统介绍 从狭义上来说,版本控制系统是软件 ...
- GoLang基础数据类型---字典
Map 是 Go 中的内置类型,它将键与值绑定到一起.可以通过键获取相应的值. 如何创建 map? 可以通过将键和值的类型传递给内置函数 make 来创建一个 map.语法为:make(map[Key ...
- .NET 的程序集加载上下文
原文:.NET 的程序集加载上下文 我们编写的 .NET 应用程序会使用到各种各样的依赖库.我们都知道 CLR 会在一些路径下帮助我们程序找到依赖,但如果我们需要手动控制程序集加载路径的话,需要了解程 ...
- token jwt配置
1. token jwt配置 1.1. pom <!-- token验证 --> <dependency> <groupId>io.jsonwebtoken< ...
- Redis安装、主从配置及两种高可用集群搭建
Redis安装.主从配置及两种高可用集群搭建 一. 准备 Kali Linux虚拟机 三台:192.168.154.129.192.168.154.130.192.168.154 ...
- 三星手机使用应用沙盒一键修改路由mac数据
之前文章介绍了怎么在安卓手机上安装激活xposed框架,xposed框架的极强的功能大家都知道,能够不修改apk的前提下,修改系统底层的参数,打比方在某些应用情景,大家需要修改手机的某个系统参数,这情 ...
- Spring的核心容器
Spring框架的主要功能是通过其核心容器来实现的.Spring提供了2种核心容器:BeanFactory.ApplicationContext. BeanFactory BeanFactory是一个 ...
- 超详细的纯净windows系统重装示例
之前说过通过使用大白菜制作启动盘,再去系统之家下载系统.虽然系统能安装,但是有时安装的是ghost版本,安装方便,只要引导后面就是等待自动安装,驱动什么的都不用管.但是有时会带上很多软件,不好清理甚至 ...
- [LeetCode] 538. 把二叉搜索树转换为累加树 ☆(中序遍历变形)
把二叉搜索树转换为累加树 描述 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和. ...