洛谷oj刷题
文章平均质量分 58
算法提升
weixin_44132485
这个作者很懒,什么都没留下…
展开
-
P1107 [BJWC2008]雷涛的小猫
一、题目[BJWC2008]雷涛的小猫题目背景原最大整数参见 P1012题目描述雷涛同学非常的有爱心,在他的宿舍里,养着一只因为受伤被救助的小猫(当然,这样的行为是违反学生宿舍管理条例的)。在他的照顾下,小猫很快恢复了健康,并且愈发的活泼可爱了。可是有一天,雷涛下课回到寝室,却发现小猫不见了!经过一番寻找,才发现她正趴在阳台上对窗外的柿子树发呆…在北京大学的校园里,有许多柿子树,在雷涛所在的宿舍楼前,就有 NNN 棵。并且这 NNN 棵柿子树每棵的高度都是 HHH。冬天的寒冷渐渐笼罩了大地,树原创 2022-05-31 08:42:55 · 258 阅读 · 0 评论 -
P1209修理牛棚
一、题目[USACO1.3]修理牛棚 Barn Repair题目描述在一个月黑风高的暴风雨夜,Farmer John 的牛棚的屋顶、门被吹飞了 好在许多牛正在度假,所以牛棚没有住满。牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜。有些牛棚里有牛,有些没有。 所有的牛棚有相同的宽度。自门遗失以后,Farmer John 必须尽快在牛棚之前竖立起新的木板。他的新木材供应商将会供应他任何他想要的长度,但是吝啬的供应商只能提供有限数目的木板。 Farmer John 想将他购买的木板总长度减到最少。给原创 2022-05-25 20:05:33 · 306 阅读 · 0 评论 -
P1195口袋的天空
一、题目口袋的天空题目背景小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空。有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖。题目描述给你云朵的个数 NNN,再给你 MMM 个关系,表示哪些云朵可以连在一起。现在小杉要把所有云朵连成 KKK 个棉花糖,一个棉花糖最少要用掉一朵云,小杉想知道他怎么连,花费的代价最小。输入格式第一行有三个数 N,M,KN,M,KN,M,K。接下来 MMM 行每行三个数 X,Y,LX,Y,LX,Y,L,表示XXX云和 YYY 云可以通过原创 2022-05-24 21:10:55 · 243 阅读 · 0 评论 -
P1194买礼物
一、题目买礼物题目描述又到了一年一度的明明生日了,明明想要买 BBB 样东西,巧的是,这 BBB 样东西价格都是 AAA 元。但是,商店老板说最近有促销活动,也就是:如果你买了第 III 样东西,再买第 JJJ 样,那么就可以只花 KI,JK_{I,J}KI,J 元,更巧的是,KI,JK_{I,J}KI,J 竟然等于 KJ,IK_{J,I}KJ,I。现在明明想知道,他最少要花多少钱。输入格式第一行两个整数,A,BA,BA,B。接下来 BBB 行,每行 BBB 个数,第 III 行第原创 2022-05-24 10:29:06 · 222 阅读 · 0 评论 -
P1180 驾车旅游
一、题目二、解题思路1.这道题题目描述仍有错,唉!心累!问题有二:(1)并不是仅在第一个停下的加油站加满油,而是只要去油站加油就会把油加满;(2)收钱不需要四舍五入,只需要在输出的时候四舍五入精确到0.1,如果之前就四舍五入的话,只能拿70分。2.抱着去暴力的心态试试,没想到直接AC了。思路也很简单,只需要使用深搜找到所有可能解,然后选择花钱最少的即可。需要注意的是,题目中规则1的意思是,当油箱中的油少于一半的时候,可以选择加或者不加;那么我们只需要在能加油的地方挨个尝试加或者不加即可。三、代码原创 2022-05-19 21:54:14 · 241 阅读 · 0 评论 -
P1160 队列安排
一、题目二、解题思路由于该题每步都为插入,因此为明显的链表题。由于不想写链表,首先尝试使用数组去求解:直接记录每位同学的位置,插入情况就两种,插在邻居的左边或者右边;当插在邻居左边时,新插入同学的位置为邻居的位置,然后邻居及站在该邻居后面的同学位置全都加一,而插在邻居右边时,新插入同学的位置为邻居的位置+1,该邻居后面的同学同样位置全都加一。很遗憾,超时!只能写链表了。由于担心超时,我采用了空间换时间的策略,使用双链表存储整个队列。对于每个同学,我们只需要记录其左右邻居是谁,当知道队头或者队尾时,原创 2022-05-14 09:03:53 · 126 阅读 · 0 评论 -
P1159 排行榜
一、题目二、解题思路1.读懂题目以后,会发现题目似乎不难,直接想到,设置三个列表,分别保存UP、DOWN和SAME的歌曲,把UP的数组放在结果的后面,然后把DOWN的结果放在前面。2.开始以为会有坑,抱着试试的态度提交,结果直接AC三、代码#include<iostream>#include<string>#include<vector>#include<map>#include<algorithm>#include<c原创 2022-05-13 19:47:44 · 173 阅读 · 0 评论 -
P1142 轰炸
一、题目二、解题思路两点确定一条直线。而判断一个点是否在一条直线上,除了计算我没想到有何简单的办法,所以我决定采用暴力做法,找到所有可能的直线,然后再判断有多少个点落在该条直线上。在暴力的时候,首先想到,选择点1和点4与选择点4和点1形成的直线上一样的,这样我们可以将暴力的规模缩小一半,但还是会超时。接着想到在一条直线上的点,我们只需要选择一次就够了。比如,假设点1,2,4,6,8位于同一条直线上,那么在这5个点中,任取2个点形成的直线是一样的,所以我们可以将位于同一条直线上的点进行记录,只计算原创 2022-05-07 20:54:10 · 374 阅读 · 0 评论 -
P1135 奇怪的电梯
一、题目二、解题思路看到该题,我第一反应是使用动态规划进行求解,但是在分析题目的时候发现,该电梯不同于生活中的电梯:想去几层就去几层,而是去的地方是固定的。那么很容易想到,整个电梯的运行情况实际上可以看做是一张图,因此,该题的求解应该与图有关,而不是动态规划。题目要求计算A楼到B楼最少要按几次按钮(实际上是需要中转几次。不考虑按开和关按钮)。当构建好图时,该问题可以转化为B的几阶邻居是A,很容易想到使用层次遍历法进行问题的求解。有两处细节需要注意:(1) 在构建图时,我们构建的是有向图,而非无向原创 2022-05-06 16:50:04 · 310 阅读 · 0 评论 -
P1123 取数游戏
一、题目二、解题思路题目中矩阵的最大规模只有6×6,而T的数值也不超过200,看到规模比较小,想到可以尝试用暴力法进行求解。如果是我们自己来做,为了找全所有情况,一定是从小到大按序进行数的选择,所以我们在暴力求解时,也可以采用该种思路,这样可以防止重复计算。以5×5的矩阵为例,编号如下图:我们采用深搜的方法逐个进行数的选择。假如我们没有规定从小到大进行数的选择,那么将会出现如下情况:假设我们第一个选择的数是5,那么采用深搜时,1-3都可以作为下一次的选择,但这样会造成重复计算,因为此时的情况与原创 2022-05-05 15:47:45 · 236 阅读 · 0 评论 -
P1122 最大子树和
一、题目二、解题思路对于该题,我首先把它当成了图的问题,结果没找到突破口。后来看到题目:最大子树和以及关键字:未修建时每朵花不孤立、N个节点N-1条边,意味着这是一颗最小生成树,于是选择将该问题当成树的问题。既然是树的问题,那么意味着我们需要找到树的根节点。接着想到,对于美丽指数为负数的节点,必不可能为根节点,原因见下图:图中白色数值表示节点美丽指数,黑色数值表示节点编号。左图描述了节点1不需要保留的情况,右边图描述了节点1需要保留的情况。对于左图,节点1不需要保留,那必然不能作为根节点,因原创 2022-05-04 11:27:48 · 425 阅读 · 0 评论 -
P1118 [USACO06FEB]Backward Digit Sums G/S
一、题目二、解题思路看到n的规模比较小,首先想到了使用暴力求解,最大规模为12!。但是考虑到,当n=12时,如果我们每次按照游戏的方式去模拟计算sum,效率将会很低。分析游戏规则不难发现,sum的值由最上层的排序决定,并且每层均是上一层的和,所以,最终的sum必然可以写成第一层数字的和,即sum=∑ai∗kisum=\sum{ai*ki}sum=∑ai∗ki,而且kikiki与aiaiai无关。那么如果我们得到了kikiki,计算效率将会显著提高。除此之外,还可以发现,如果两个数列是关于中点对称时原创 2022-05-02 19:41:42 · 1397 阅读 · 0 评论 -
P1113杂务
一、题目二、解题思路这道题难度比较低,双重for循环直接搞定,主要因为题目给的限制条件比较多,降低了题的难度。如果去掉限定条件,杂务k的准备工作只能在杂务1至k-1之间,那题目难度将会适当增大。现在加入限定条件,相当于我们只需要从小到大确定杂务的执行结束时间,但如果取消该条件后,我们每次都需要去寻找,到底哪个杂务的执行结束时间能被确定(即需要找到前驱已经确定的那个杂务)。三、代码#include<iostream>#include<string>#include<原创 2022-04-29 20:54:58 · 469 阅读 · 0 评论 -
P1111修复公路
一、题目二、解题思路看到该题,我第一反应以为是求最短路径,因为题目中说是最早什么时候通车,我把该问题想成了确定图中任意两个节点的最短距离,然后最大的距离即是最早的通车时间。但随后经过分析,发现问题并没那么复杂,因为路是并行修的,也就是说最耗时的那条路一旦修成,就相当于所有可达村庄均已通车,所以该问题实际上为最小生成树问题,而非最短路径。对于最小生成树问题的求解,可以分为两步:(1)将所有边从小到大进行排序;(2)从小到大进行边的选择,判断新加入的边是否多余。对于排序问题,我们可以直接采用map存原创 2022-04-28 09:46:09 · 172 阅读 · 0 评论 -
P1106删数问题
一、题目二、解题思路首先想到使用暴力求解,显然所有情况共ANkA_N^kANk种,计算量比较大,很有可能超时。该题为从N个数中取k个数,对于这种问题,应当想到是否可用动规解决。分析发现,对于该问题来说,后面的结果不影响前面的结果,具体来说,假设已经从前i个数中取了j个数,随后我们在i+1~N中取数字的时候,不管怎么取,前i个数的结果都是确定的,不会因为后面取什么数而改变,因此,可以确定该题能使用动规解决。假设dp[i][j]表示前j个数中,取i个数后的最优解。由于该题的数字很大,显然无法使用i原创 2022-04-27 19:05:47 · 238 阅读 · 0 评论 -
P1103书本整理
一、题目二、解题思路1.首先需要将书根据高进行排序。发现书的高度唯一,因此我们可以采用map进行书的存储,存储完毕后,书将会自动有序。2.考虑到前面的书拿掉时不会对后面的结果产生影响,因此可以想到该题可用动态规划进行求解。3.应当注意的是,在动规时,应当保存每本书的状态(第i本书是否保留,因为如果不保留的话,无法计算第i本书以后的不整齐度),此时规定dp[k][i][0]表示对于前i本书,当不保留第i本书时,拿走k本书后的最优值;dp[k][i][1]表示对于前i本书,当保留第i本书时,拿走k本原创 2022-04-26 16:32:07 · 1587 阅读 · 0 评论