距离noip(退役)还有四十多天吧,时间不多了。
文章目录
10.3
贪心题做得我头痛,好吧,这种思维题向来都是我的弱项。
- 区间相交问题
额,基于对于此类贪心题的基本印象,果断按照右端点从大到小排序,然后 (幸好贪心还给分)
正解是从小到大排序,一路推过去 - 任务时间表问题
也算是一道经典的题目,按照惩罚重的有限完成 - 非单位时间任务安排问题
上一题的升级版。
其实考场上有想到类似dp的思路,然而…貌似又忘了。
先按照时间限制排序,然后直接枚举就行了(也不能完全算dp吧) - 多元 Huffman 编码问题
数据貌似有点问题。
合并果子的升级版。
最小值的话,每次最小的 个合并即可。
最大值的话,每次只合并两个。 - 登山机器人问题
这题就当我眼瞎吧,有看漏条件了(每个机器人至少走一步)
先处理出每个机器人走一步的代价,然后每次取最小即可 - 可重复最优组合分解问题
头痛的题,经过一段玄学的分析(表示这一题我不做太多的要求,随缘吧)可以得出:尽量分解成 ,然后根据其余数分类讨论吧,差不多
10.4
算是一套模拟题吧,题目略水,然而最后一题连搜索都没打,直接水部分分去了( 和 的情况)。
- 进制转换
算是一道水题吧,如果理解了进制转换的原理,那么直接上就行了。
注意 的情况 - 方格取数
一道很经典的 题,四(三)维dp。 - Car的旅行路线
重点在于建图,有点难码(看着就心累)。剩下的交给最短路就行。 - 矩形覆盖
为什么我第一感觉动归???
由于数据范围很小,所以直接搜索就行了。枚举每个点属于哪个矩形,一路扫过去。
10.4–NOIP提高组模拟赛Day2
晚上找不到事做,于是去水了一下比赛。感觉还行,有数据结构题比较合我胃口。
- Agent2
区间修改加上单点查询,直接树状数组就好了。如果不放心的话,可以加上离散化先。 - Portal2
一道模拟题。题目描述的感觉太强烈了,总是让人想到了栈,于是直接上吧(其实看到 操作的时候是有点虚的)。
其实晚上回寝的时候突然醒悟,不是可以用双向链表(一个正一个反,方便 操作)么。。。 - War2
看到题的第一眼感觉像是个图,往后瞄一眼数据范围( ),果断状压
PS:考试的时候犯傻了,没事排了个序。实际上,对于状态的枚举直接从 就行了。刷表法的话,某位加上 绝对比原数大;填表法的话,某位去掉 绝对比原数小。
10.5
题目还行吧,就是有点暴力(话说零几年的题怎么就这么暴力呢)。
数据还是有点水的,有点运气的成分。
- 神经网络
拓扑排序,直接过去就行了。(试卷题目的范围有误) - 侦探推理
毒瘤的码农题,本来思路应该谁对的,但是由于时间关系,就直接骗分了(只完成了读入)
和 还是挺好用的。
思路其实很简单,同时枚举凶手和星期就行了,然后根据说谎人数来判断。 - 加分二叉树
典型的区间 ,略 - 传染病控制
只能说人品好吧,贪心骗了 分。(有反例)
不过正解也挺简单的,就是直接枚举每层删哪条边。
10.6
一道毒瘤的字符处理题,一道玄学的结论题???
还有被
坑的
分
- 能量项链
区间DP的标准模板 - 虫食算
按照运算的顺序开始搜,每填完一个数后,往后扫一遍,看看是否有明显的错误。 - 过河
被排序给坑死了。
本来是一个很简单的动归,但由于范围很大,因此考虑一下特殊处理。
不难得出这么一个结论:当 时,最多往后走 格后,就能到达任意点(极限情况 )
因此,若两点间的距离大于 ,直接改成 即可,注意 时特盘 - 篝火晚会
一道神奇的结论题?(表示不会证明,貌似要扯到置换群去了)
然而,我题意都弄错了(不一定要选择连续的)。
求出目标的环还是挺简单的,主要是求最小的代价。
结论:将序列 转化成 的最小代价为 与 在对应位置上不同的个数。
当然,仅仅靠上述的结论是不够的,由于时环形,时间复杂度为
考虑下优化:不难发现,无论从哪里断开,与对应点间距离相同的点是不变的,也就是说,同时匹配的点是确定的。于是,直接记录距离相同点集的最大值。注意正序倒序都要来一遍。 - 等价表达式
思路有点奇妙,通过将 赋值来简化(赋一两个就行了),将其转化为表达式求值,用求出来的数值判断即可。(考虑取模,取模的话,统一变成正数)
10.7
难得题目没看错。
整体来说还是可接受的(都做过几遍的题了)
- 金明的预算方案
有依赖型的背包,分类处理成分组背包即可 - 树网的核
两边 求出最长链,尺取法扫一遍求最小值 - 传纸条
典型 ,跳过 - 序关系计数问题
第二类斯特林数的变形。允许空箱且箱子不同(本题中 )
- 商店购物
搜索水了点分。
由于商品的种类不超过五,所以可以考虑转化为用五维 。将商品的需求量看做背包(没有的视为 ),优惠方案(单价也可以算是一种)看做物品,然后做完全背包即可。
10.8
恭喜被虐(QAQ)
该错的不该错的全炸。
- 覆盖问题
考场上推了个诡异的记忆化,结果。。。(考场上还写错了,乘法原理果断写成了加法)
正解其实很简单,一个格子一个格子地搜就行了,遇到空格就枚举放的方式。 - 解集个数
被精度给坑了,要实时地记录分子与分母( )。
最后一个分数的判定:前 个分数的和满足 即可
剪枝:枚举顺序非降;若此后每个都取最大值仍小于 ,减掉;若此后每个都取最小值还大于 ,减掉。 - 黑白棋游戏
本来是一道很水的题,结果一发迭代加深直接炸了。
其实只要广搜就好了。 - 家族史图
题目描述有点毒瘤,考场上直接略过去了。
感觉像是一个模拟题。
其实只要按照题目的要求判断即可,就是有点复杂。
要点:记录入度判断儿子的合法,用弗洛伊德之类的处理父母的联通,用层数判断后代。 - 单词游戏
给人的感觉就是搜索,然后
的范围很小,于是可以考虑用状压解决。
有点类似与哈密顿路的解法,令 表示在走过状态为 的边,且最后位于 点后的最大复杂度。(对于单词的索引,其实可以建图)
10.9
当水题遇上水笔???最简单的两题都写挂了,,,
- 小木棍
不想说了,连最基础的剪枝都忘了,, - 邮票问题
利用dp来优化枚举的范围,每层都要求一遍dp - 魔板
这题还算友好不要求最小方案数(噩梦)
首先枚举目标行的第一列与初始行的哪一列相匹配(用行变换来实现同化),至此,行就确定了下来。随后用 判断其他行是否匹配就行
(可以记录行列中 的个数来优化) - 方程的解数
其实考场上的想法离正解很近了。
正解是分成两块搜,用前一半的值匹配后一半的值;而我则考虑按照系数的正负分
搜索很简单,只要写个 和快速幂就行了 - 算符破译
珍爱生命,远离工业。(当然,用不着 行的,两百多就差不多了)
最后一个点五秒多就算了(然而 上 )
调个一个下午的题,看来码力是真的不够啊。
思路还是比较容易想的,先确定符号,再确定数字。
剪枝:
三重循环先枚举出符号(顺便判断可行性: 的唯一性,符号的位置,在符号制约下是否能填数字);
利用位运算优化枚举(值得学习);
边枚举数字边判断(类似虫食算)
10.10—搜索专题考试总结
这两天考的算是很渣的了。有点头痛。
首先,做题时思路有点紊乱。无论是做过的部分题目,还是有些许思路的题。都存在接近正解却失之交臂的情况,而且有时候还是十分明显的细节;其次,是缺乏分析复杂度的能力,这也是一直以来我所欠缺的。事实上,这一点尤为重要,做题时应该要有一个整体的框架,明确题目的数据范围以及解法的复杂度范围。这样才能较快地选择较为便捷的算法,进行有效的优化。
对于第一点而言,没什么可说的,无非就是考试时要注意。对于第二点,考虑抽时间做做相关的整理吧。
10.11
dp专题,题目难度海星,都有一点思维难度。
- 三角形牧场
直接求的话是不可能的,考虑用dp判断可行性,最后通过海伦公式计算求得答案。
令 表示是否可以组成边长为 的三角形。 - 多米诺骨牌
记录差值,令 表示差值为 的最小翻转次数。
注意 可以为负数,所以统一加上一个值变为非负 - 最长上升子序列
由于必须要包含第 个数,所以考虑以m为界,将数列分成两部分,分别求一次 ,然后接上即可。
优化:在 前面且数值大于 的与在 后面且值小于 的均可忽略。 - 修剪草坪
考场上其实都推出来了,单调队列也写好了,然而,边界写挂了
令 表示前 头牛中选取的最大效率,则
, 其中 为断点且
用前缀和表示:
考虑到数据范围,用单调队列优化即可 - A Simple Task
由于存在重复计算的可能,所以考场上连搜索都没有打出来(其实已经差不多可以处理重复了)。
简单环不好表示,这里退一步,考虑表示简单路径的状态。令 表示经过点集为s,起点为 中编号最小的点(令为 ),终点为i的简单路径条数。
转移:对于一条 的边
若 则
若 且 , 中的点数大于 ,则
注意的是,对于一个简单环而言,我们一共统计了 次,因此,最后的 要
10.12
今天的题目海星,比较简单。
- 关键子工程
本来是能 的,结果被在一点小细节上出现了失误( 用 后一定注意保存可用的长度)
一道简单的拓扑,第二问的话,直接利用求得的 数组,反着推一遍就行了 - 编辑距离
算是一道经典的 ,令 表示 的前 位与 的前 位匹配的最少操作次数。
初始化:
转移: - 硬币找零
简单的完全背包 - 快餐问题
总感觉题意还是有点问题,网上一共有两种方案,均能过(但其中一种两每个生产线的时间都连在了一起。)
这里只讲一下将时间连在一起的
令 表示前i条生产线生成**的数量分别为 的套餐数。
然后直接推就行了 - 物品装箱问题
简单的分组背包
10.14
好吧,考试的时候心态炸了。
- 火车进站
由于 很小,所以可以直接分类讨论。分别做 处理。
注意m=2/3的时候,考虑只有1、2个同时进站的情况 - 凸多边形的三角剖分
区间 ,令 表示划分连续编号 的最小值。
注意拆环成链 - 最长前缀
貌似数据有点水,匹配的时候直接暴力 也能过。
令 表示 是否能匹配 - 卡车更新问题
初始化有点毒,被整了好久。
方程的定义有很多,但由于要记录路径,还是选择一种容易点的吧。
令 表示第 年时当前的车用了 年
当 时,说明去年换了车,枚举从上一辆车用了多久,取最优值。
否则,直接说明与去年是同一辆车,直接继承过来即可。
记录路径的话,那就是标准的套路了. - 选课
本来树型分组背包直接求就行了,然而要输出方案。
由于路径不好记录,考虑换一种写法——转二叉树。
利用“左儿子,右兄弟”的原则,将其转化成一棵二叉树,然后直接上几搜吧,顺便记录路径。
10.15
emmm,有点无奈啊,知道大致思路,然而总在一些细节方面出错。
- Hankson 的趣味题
有两种方法,既可以考虑暴力枚举 的因子用 判断,也可以根据唯一分解定理,限定 中各个质因子次数的取值范围 - 青蛙的烦恼
表示数据不给面子,暴力只有 分
很明显的一点,青蛙走的路径决定不能交叉,因此它只能走连续的点。
于是按着这个思路搜索,用记搜优化即可。
令 为以 为起点,做过点集 的最短距离
转移如下:
IL double dfs(int l, int r)
{
if(f[l][r] != inf) return f[l][r];
if(l < r) return f[l][r] = min_(dfs(l + 1, r) + dis[l][l + 1], dfs(r, l + 1) + dis[l][r]);
return f[l][r] = min_(dfs(l - 1, r) + dis[l][l - 1], dfs(r, l - 1) + dis[l][r]);
}
- 警卫安排
dp方程什么的都对了,忘了找根。。。。
令 :表示节点 被父亲看着/被儿子看着/被自己看着。
转移方程:
: 儿子只能被自己或被儿子看着
: 保证必定有一个儿子放置了看守
:随意了,去最小即可。
初始化:对于叶子节点而言, - 最短回文串
证明未知。答案为总长度减去正反序列的 - 平板涂色
本来想的是两维的,结果写的时候突然脑抽改成了一维,,,,,
明显的状压 令 表示将点集 中的点染上色且最后染色的点为 。直接转移即可 - xx
J哥表示要贴成绩,那就随便吧┑( ̄Д  ̄)┍
10.16
主要还是细节与实现上的问题,看来还是缺少练习。
关于
-
硬木地板
数据貌似有点问题。
一道明显的状压 ,然而在状态转移的推到上还是出了点问题。一般而言,而直接枚举 就行了,但是本题的状态有点复杂,难以直接判断,因此考虑先用 求出能相互转移的状态,然后再进行
令 表示前 行全满,第 行状态为 的方案数 -
通向自由的钥匙
裸的树型分组背包,然而边界还是弄错了。 -
三角蛋糕
忘了三角形正反都行了(还要注意奇偶性的问题),所以看漏了。
其实这一题可以说是暴力了,只不过通过预处理来优化罢了。
记录一下从该点出发,向下/上拓展的个数,向左/右拓展的个数。 -
骑士
状压 。由于骑士的走法(日)牵扯到了上面两行,因此仅仅记录当前这一行的状态是不够的。
令 表示前 行共放置 个骑士,第 行为 ,第 行为 的方案数. -
补发