自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(450)
  • 收藏
  • 关注

原创 UVA116 单向TSP Unidirectional TSP

这个题其实挺简单的,很明显就是数字三角形那样的DP,然后唯一的难点就是这个题需要输出方案,行号字典序最小的方案,所以这里我们从后面的列向前DP,然后和BFS的时候记录路径是一样的方法,然后这个从后向前DP的方法也是和本书第6章后面的一个BFS习题是一样的思路,如果你从前向后DP其实是不好保证字典序最小的,但是这个为什么,至今也没找到一个人讲,只是感性的感受现在对这个结论有印象,所以第6章的那个BFS习题还一直没写,什么时候等自己真正的理解了,建立了逻辑思维体系而不是靠记忆,再去把那个题过了。

2024-05-19 14:17:10 184

原创 P5522 [yLOI2019] 棠梨煎雪

知识点:线段树,位运算,状态压缩这个题用网络用语说就是挺一眼的,只要搜索做了不少的题就能一眼看出来这个怎么做,首先这个题的线段树就是最最基本的线段树,单点修改,区间查询,然后每个位置都有一个字符串,都是登长的,区间查询问当前区间所有的字符串是不是都可能相等,以及那个可能相等的字符串的个数,这个个数就是查询要的结果,然后取异或和就行了,学了bitset之后做这种题就方便很多了,线段树除了维护区间左右端点,再维护两个bitset,没学的话应该是两个整数的,因为字符串的位数很小,那么其中一个bitset维

2024-05-09 14:28:44 162

原创 HDU1394 Minimum Inversion Number

看完了别人的代码瞬间想到这个东西,真的是感觉自己学傻了,啥都要套线段树了,这里思维的部分,明明是不用的。

2024-05-07 07:50:01 164

原创 UVA1160 X-Plosives

这个题题意搞不懂,题目说的是不能有超过两个互相配对,那么这就是一个环,但是如果输入已经输入过的该怎么处理,也不知道,所以我就直接用set判重了,如果输入已经输入过的,那么就直接答案加一,交上去稀里糊涂的过了。

2024-05-06 05:25:55 165

原创 P2161 [SHOI2009] 会场预约

然后思考一下为什么这个题可以用树状数组做,单点增加不必说,求区间和也是,关键就是那个区间置零操作,很显然这个题我们输入的点的个数最多也就是n,那么删除的点最多也就这么多,如果删除的时候我们能够具体知道要删除的是拿个,单点操作一个一个删除显然是可以的,就是不知道如果把那些需要删除的点一个一个找出来,索性用线段树的区间修改一下推平,

2024-05-05 22:38:55 261

原创 P2471 [SCOI2007] 降雨量

现在就学了线段树,这个题用线段树来做,发现年份其实就是类似于数组下表的作用,可以离散化,然后记录一下离散化之后对应的值,然后我们发现这个题需要分类讨论,那么中间不连续的年份,或者说输入没有给出的年份,那么一段没有给出的年份我们离散化之后至少要有一个,所以离散化的时候是当前年份加上他的减一加一来离散化,显然线段树要维护区间最值,同时再维护一下当前区间里面有几个点是降雨量未知的,这个用前缀和应该也行,但是就顺便用线段树来维护了,之后就是分类讨论了,我在演草纸上写了一下,打代码对着打的,竟然一次性过了,

2024-05-05 22:18:25 88

原创 POJ2965 The Pilots Brothers‘ refrigerator

知识点:枚举,DFS。

2024-05-05 08:00:34 155

原创 UVA11235 Frequent values

这个题读完最值得注意的条件是序列是单调的,这会造成什么,那么就是相同的元素都是连续的,聚集在一起的,这样这个题就可以转化成区间最值问题,我们考虑最基本的情况,对于查询,中间是若干连续数,也就是所有的数都在查询区间里面,然后两边是某个数不完整的序列,所以,中间完整的部分,我们可以用st表之类的求其出现次数最多的元素的出现次数,因为不会st表,就用了线段树,然后我们再分别考虑两边的情况,知识点:线段树,RMQ。

2024-05-04 08:41:00 160

原创 HDU1540 Tunnel Warfare

前面做了两个线段树上二分的题了,这个题其实思路就比较自然了,还是用线段树上二分,算法竞赛上面用的好像是类似维护最大子列和的思路,还没看我就觉得不如线段树上二分,算是一个基础的线段树上二分的练习。

2024-05-03 12:01:00 4

原创 P4344 [SHOI2015] 脑洞治疗仪

知识点:线段树,线段树上二分。

2024-05-03 09:57:42 47

原创 P1438 无聊的数列

这个题应该用树状数组也可以写,但是思维转化比线段树多一些,用线段树还是比较好的,但是这个题我还是没有一次过,这个题我的思路也很简单,维护原序列的差分序列,然后在差分序列上面进行修改,区间第一个点加上首项,区间剩下的点都加上公差,然后就是我错误的地方,那就是我前面差分序列操作之后,序列后面的第一个点没有减去前面加上的数的和,这个是我错的地方,至于为什么,我们要通过差分序列求前缀和,所以差分序列我们最后要减去一个数消除影响,这个题总的来说就是加深差分的印象和理解。知识点:线段树,差分。

2024-05-01 23:23:21 4

原创 P1072 [NOIP2009 提高组] Hankson 的趣味题

【代码】P1072 [NOIP2009 提高组] Hankson 的趣味题。

2024-04-29 11:13:56 88

原创 UVA10539 几乎是素数 Almost Prime Numbers

这个题还是比较简单的,题目说的数,是合数但是只有一个质因子,显然是质数的大于1次方的数,那么显然我们预处理1e6范围以内的质数就行了,然后每个质数,找他的大于1次方,并且在题目范围里面的数的个数就行了,这里还是可以用二分的,但是又没用,累了。

2024-04-29 03:46:16 95

原创 UVA1644 素数间隔 Prime Gap

这个题就是质数的判定,然后用二分效率能高一些,首先看题目的范围,我们知道可以用质数筛,先求出来需要用的质数,当然还有一种方法是以输入的数为中心向两边扩展,感觉这样子也行但是没试,我们先预处理出来可能用到的质数,然后一开始我用的是线性的做法,看了别人的题解才想起来这里可以用二分把时间从线性优化到log,就是找第一个大于等于输入的质数,然后输出答案就行了,感觉自己还是菜了啊,一开始写的时候没有用二分。

2024-04-29 03:27:26 80

原创 UVA1210 连续素数之和 Sum of Consecutive Prime Numbers

这个题显然可以使用尺取法,因为满足单调性和连续区间这两个条件,先用质数筛求出可能用到的质数,这样这个问题就变成了求多少个子数组和等于题目输入的数,用尺取法,这里稍微思考了一下就是尺取法的退出的条件,这个写的和上一次的不一样,当所有的数都查找完或者当前的子数组的长度是1的话,那么就退出,这是这次想的判断退出的条件。知识点:质数,尺取法。

2024-04-29 02:05:50 320

原创 P1463 [POI2001] [HAOI2007] 反素数

知识点:质数,约数,DFS。

2024-04-29 00:38:41 178

原创 AcWing 197. 阶乘分解

上面一个没说清楚的一个地方,考虑一个质数出现的次数,1到n里面,它在有的数里面不是因子,有的是1次因子,有的是2次因子,以此类推,我们用n除以这个质数的一次,得到的就是他作为大于等于1次因子出现的次数,除以它的二次,就是它作为大于等于2次因子出现的次数,这样累加,最后正好做到了不重不漏,

2024-04-28 17:10:34 203

原创 UVA10140 Prime Distance

【代码】UVA10140 Prime Distance。

2024-04-28 03:15:41 194

原创 UVA1326 Jurassic Remains

知识点:深搜,位运算。

2024-04-27 18:06:35 116

原创 P3908 数列之异或

【代码】P3908 数列之异或。

2024-04-24 13:18:19 96

原创 P1434 [SHOI2002] 滑雪

刚才闲就把洛谷上面的滑雪题写了,谁知道打开书一看,这个居然是入门经典习题第一题,并且两个题基本一模一样,不知道是谁借鉴谁的,这个题我用的方法就是建图,拓扑排序,然后逆序动态规划,算是这类题的老套路,然后这个题边界条件是,没有后继结点的点的DP值是1,这个需要注意,然后这个DP是不指定起点和终点的,目前就会这一种递推的方法,这类题基本都是这样子写的。知识点:拓扑排序,动态规划,图论建模。

2024-04-13 19:39:37 106

原创 UVA12563 劲歌金曲 Jin Ge Jin Qu hao

这个算是01背包的小变形,但是这个题我的理解还不完全,这个题就三个点,首先就是剩余时间自己推一下就知道没有这么大,第二个是我们要给最后一首歌留点时间,所以背包的大小就要减一,避免用原来的背包大小正好填满,最后一个是这个题的要输出的答案,我把它当成一个二元组了,也就是这个背包的物品的价值当成是二元组了,所以这里就根进制一样,和前面的最短路的搜索还是一样的,就是物品数以一个很大的数加上这个物品的大小,就是我们这个题的背包模型的价值,但是看了看题解,发现基本没人这么写,还是要学习一下别人的思路。

2024-04-13 15:43:09 197

原创 UVA116 单向TSP Unidirectional TSP

这个还是DAG上的动态规划,因为题目里面规定了是从左向右走,保证了是有向无环图,然后状态是坐标,子问题是当前位置到最右边的最小值是多少,然后按照拓扑排序逆序递推就行了,这里需要输出路径,没有使用BFS里面一边处理一边记录上一个状态的写法,而是求解之后又正着推了一边,可以求出符合题意的路径,然后这个题是点权的动态规划,和前面第二道例题基本上是一模一样的,最后这个题uva上面过不了,但是hdu和udebug都过了,不知道怎么回事。知识点:动态规划,拓扑排序。

2024-04-13 07:42:18 178

原创 UVA437 巴比伦塔 The Tower of Babylon

然后就是一些小细节,这个题的边界条件,很显然是建的图里面出度为零的点,他们的状态的函数值就是自身的点权。知识点:动态规划,图论建模。

2024-04-12 13:08:40 157

原创 UVA818 切断圆环链 Cutting Chains

然后看这个题可以用指数枚举来做,因为数据很小,才15,2的15次方是3e4,在加上剪枝,应该是能过的,时间复杂度应该是前面再乘以边的数目,我们指数枚举,用散列数组来记录哪个环是开开的,然后到递归的终点的时候,做三个判断,我们一边遍历输入的边,如果有的边的连边的点是打开的,那么这个边是不用连接的,三个判断是,1如果有环,那么不行,2如果有点的入度大于2那么不行,如果连通块的个数大于开开的点的个数的二倍加一,那么不行,这个三个判断一下,就行了,这里应该是属于思维题的类型,用并查集来维护连通性,并且来判环,

2024-04-11 13:50:21 115

原创 UVA589 Pushing Boxes

但是acwing上面那个只要输出一条唯一的路径的还有一个测试点没过,不知道怎么写,uva这个输出任意一条路径的,其实就是dijsktra问题,和后面的车加油,以及紫书上面的三个被子倒水,这三个题说是搜索,都是无负权图最短路的模型,所以以后做题还要有这个建立模型的意识。这个题过了uva上面的,蓝书上面也是和uva一样的,就是输出最短路径,如果有多个路径的话,那么任意输出一个,acwing上面的只能输出唯一的路径,说是按照上下左右的顺序要唯一的,那个还没过,先写一下和进阶指南一样的题目。

2024-04-09 05:15:25 225

原创 UVA11694 Gokigen Naname谜题 Gokigen Naname

然后是深搜,一进去就要来一个剪枝,一开始因为没有写这个,这个剪枝就是,只要有一个是数字的点(注意不是方格)它周围还没填斜线的方格的数目小于它还需要连的斜线的数目,那么就剪枝,这也就是一开始弄那么多的数组的原因,这个应该属于可行性剪枝,因为题目说了,数字点周围连的线的个数必须恰好等于数字点的值,不能比数字多,同样不能比数字少,一开始就是这个剪枝没写,浪费了好几个小时,这个剪枝类似与李煜东组合枚举的写法,将指数枚举加上多不行,少也不行的剪枝,就变成了组合枚举,至此这个题终于完成了,写了160多行。

2024-04-08 01:54:52 262

原创 UVA12569 树上的机器人规划(简单版) Planning mobile robot on Tree (EASY Version)

一开始不会三进制状态压缩,然后就想着用两个二进制数来表示状态,理论上应该是可行的,但是实际不行,空间啥的应该不行,这个题还真亏了读题,发现只有一个机器人,这个是做题的关键,但是一开始写的时候没有特判,输出-1,改了就过了,这个题写了1个小时,知识点:BFS,状态压缩。

2024-04-05 22:29:34 183

原创 UVA11214 守卫键盘 Guarding the Chessboard

首先这个题可以使用迭代加深,并且答案会很小,然后是搜索的框架,就是每次寻找一个没有填过的位置去填,然后有两个剪枝,我们用数组来判断某行列主副对角线是否已经放置皇后,这里我们不要在往下递归的循环里面再去加循环了,这个显然是用木桶原理可以解释的,第一个剪枝就是我们如果当前位置所代表的行列主副对角线都有皇后了,那么不需要往下递归,然后第二个剪枝没有想起来,看了别人才知道的,那就是我们当前行放了,那么下次就从下一行开始搜,这个剪枝非常强,接下来主要是思考为什么这个剪枝是对的,知识点:深搜,剪枝,迭代加深。

2024-04-05 20:49:53 194

原创 UVA1374 快速幂计算 Power Calculus

知识点:深搜,迭代加深。

2024-04-04 22:02:12 196

原创 UVA10603 倒水问题 Fill

这个题其实就是最短路问题,关键是要建立图论模型,然后这个题就好做了,但是怎么想到建立最短路模型的那就只能多做题了,这个题的关键点除了建立图论模型之外,还有一个就是状态,一开始选择状态是3元组,但是根据题意,几个杯子倒水的时候,水是不会洒到外面的,所以水的总数是相同的,那么其实状态是二维的就可以了,数组一开始开的3维的大小,结果超时,改成二维的就过了,这个情况还是第一次遇到,查找原因只能是多组数据,这是需要注意的一个点。知识点:BFS,最短路,图论建模。

2024-04-04 03:17:18 194

原创 AcWing 164. 可达性统计

至于为什么是集合,我觉得最基本的原因是这个题是一个图,所以可以用集合(虽然还没学过离散数学,尤其是集合论与图论),对每个点,我们都用一个集合来表示这个点能到达的点,很显然拓扑排序最后的点只能到自己,倒数第二个点能到自己或者最后一个点,如果有边的话,那么这个题我们可以按照拓扑排序的逆序,从后向前推,每到一个点,求自身,与所有出边相连的点的集合求并集,那么就是当前点的可以到达的点的集合,最后输出每个点的集合的大小就行了,这是之前的超时的代码,但是我觉得对位运算的理解是有帮助的。

2024-04-04 01:09:44 303

原创 P1074 [NOIP2009 提高组] 靶形数独

然后这个题只用了上面两个优化就取得不错的时间复杂度,还有最优性剪枝,以及更高级,足以通过黑题数独的剪枝都没用,其实也不会黑题的数独,然而即使如此还是最优解比较靠前,所以只用把上面两个剪枝优化能理解清楚就行了。知识点:深搜,剪枝,位运算。

2024-04-03 18:23:22 155

原创 P1312 [NOIP2011 提高组] Mayan 游戏

这个题算是一个模拟题,首先需要了解题意,题目说的是搜索的深度恰好是n,没有说尽量最少的步数,而是说步数恰好是n,按照编程的习惯,我们把整个地图顺时针旋转90度来编程,知识点:模拟,深搜,剪枝。

2024-04-03 17:32:10 295

原创 UVA11212 编辑书稿 Editing a Book

这个题算是IDA*算法的练习题,和POJ的booksort基本是一样的,那个题的数据是16,但是限制是5层,这两个题仅仅是数据不一样但是方法是一样的,这个题首先就是估算一个状态的分支有多少,比如说有连着两块A和B,我们把A放到B的后面和把B放到A的前面是等价的,所以我们粘贴的时候,统一只往后面粘贴,然后枚举长度,起点的位置,可得到几种可选择的位置,这样以16为例,每个状态的分支是560,十分大,可以使用双向BFS,或者IDA*算法,知识点:深搜,迭代加深,IDA*

2024-04-02 22:49:12 170

原创 AcWing 187. 导弹防御系统

这个题进阶指南上面给的提示是迭代加深,个人感觉这个不是迭代加深,顶多算是迭代DFS,因为迭代加深是限制搜索的深度的,然而这个题我们求最小的导弹防御系统的个数,搜索的对象选取的是每个导弹,也就是说对于每个备选答案,我们都要判断是不是能搜索完所有的导弹,我们这里迭代的对象,既是答案,也会成为剪枝的条件,如果已经用完规定数目的导弹系统,那么就不往下搜索了,但是这样一想。最后是程序的实现,应该是和ACWing的不同的,但是也懒得看了,多开了两个数组,一个存当前序列的最后一个数,一个存当前序列是单调增加还是减的,

2024-04-02 03:15:04 248

原创 UVA211 多米诺效应 The Domino Effect

然后是深搜的时候如何找到要填数字的位置,这个很简单,因为我们需要所有的位置都填上数字,所以我们只要找到一个没有填数字的位置就行,然后看它四周是不是有能和他一起填数字的位置,如果没有,那么说明这个搜索分支是不会有答案的,也自然不会向下递归,这里需要注意的一个点是,我们每次填数字的时候也要判断一下这个数字是不是被填过了,因为可能初始地图几处地方都能填这个数字(1到28),而这1到28每个数字是只能填一次的,所以这里要判断一下,这样这个题就完成了。首先这个要建立一个映射关系,方便后来往地图上面填数字。

2024-03-31 19:50:31 151

原创 UVA1601 万圣节后的早晨 The Morning after Halloween

对于这个题,有两个需要注意的点,首先题目里面说了鬼的个数不超过3个,但是可能是1个或者两个,我们为了程序写起来方便,当鬼的个数不足3个时候,要把他补成3个,这是同一写法,类似的地方还有我们写链表的时候要加上头节点尾结点,用对顶堆维护中位数的时候提前先往两个堆里面分别加入两个堆都不可能达到的数,这样降低代码难度,减少边界情况分类讨论,将所有的情况统一。知识点:BFS,双向BFS。

2024-03-31 14:41:33 141

原创 UVA12166 修改天平 Equilibrium Mobile

这个题是二叉树的练习题,但是与其说是一个二叉树的题,倒不如说是思维题,做个题主要就是你要看出那个结论,看出来结论了就很好做了,感觉是个思维题,和初学者学的二叉树的递归几乎关系不大,也就是用到了深度,这个结论要是想不起来真的不知道这个题要怎么做。知识点:二叉树,思维。

2024-03-28 18:05:10 172

原创 立体八数码问题 Cubic Eight-Puzzle

知识点:深搜,迭代加深,估价函数。

2024-03-11 14:01:11 130 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除