摘要: 传送门 这道题该怎么做呢……我自己只能想出来O(n^3)的暴力模拟……不过并不行。 来看一下正解吧……将给定的式子变一下形,得到A*height + B*speed - C <= A*minh+B*mins. 这样的话,把所有的运动员按照A*height + B*speed - C从小到大排序,这样 阅读全文
posted @ 2018-08-27 23:03 CaptainLi 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 传送门 这道题很明显是DP。不过一开始我错误的以为是区间DP……但是并不是这样。因为区间DP它需要满足区间的情况是确定的,而这道题并不是确定的情况,所以不是区间DP。 重新考虑,设dp[i][j][p][q]表示当前选取了i个男孩,j个女孩,在所有的区间中男孩最多比女孩多p个,女孩最多比男孩多q个。 阅读全文
posted @ 2018-08-27 22:13 CaptainLi 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 传送门 普及组的题目……很水。 原来写了一个模拟不过好像状态考虑的不全得了80,这次我们考虑一下dp做法。 守卫者有两种移动的方法,一种是闪现,一种是跑,我们可以把闪现和跑分开处理。 首先只处理闪现的情况,这个时候要用贪心,能闪就闪,否则原地回蓝即可。 之后在处理跑步的情况,这种情况就要用dp了,方 阅读全文
posted @ 2018-08-27 20:48 CaptainLi 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 传送门 这道题和传纸条在某些方面上非常的相似。不过这道题因为我们要求回文的路径,所以我们可以从中间一条大对角线出发去向两边同时进行DP。 这里就有了些小小的问题。在传纸条中,两个路径一定是同时处在同一个对角线上的,不过这次是双向DP,不同时在同一个对角线上,那应该怎么办呢? 我们可以选择找出其中的相 阅读全文
posted @ 2018-08-27 20:41 CaptainLi 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 传送门 这道题有好多好多种做法呀……先说一下最暴力的,O(n^4的做法) 我们相当于要找两条从左上到右下的路,使路上的数字和最大。所以其实路径从哪里开始走并不重要,我们就直接假设全部是从左上出发的好啦。设dp[i][j][p][q]表示第一条路枚举到点(i,j),第二条路枚举到点(p,q)时,当前能 阅读全文
posted @ 2018-08-27 20:10 CaptainLi 阅读(369) 评论(0) 推荐(1) 编辑
摘要: 传送门 这道题竟然可以使用全排列暴力模拟水过…… 不过我们还是说一下正解。既然数据范围这么小,所以我们考虑状压DP。 用dp[i][j]表示状态为i时,当前选取的所有数的排列,其对d取模后结果为j有多少种情况。其中i是一个二进制数字串,每一个二进制位对应原数组中的数字有没有被选中。 简单的解释一下, 阅读全文
posted @ 2018-08-26 23:55 CaptainLi 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 传送门 这道题才应该是标准的区间DP! 其实这个题用一种神奇的算法瞎写就能得80……一会可以附上参考代码……如果有神犇愿意帮助debug不胜感激…… 考虑区间DP。用dp[i][j]表示将区间[i,j]涂好需要使用的最少的颜色种数。 既然如此,dp方程就很显然,因为毕竟区间dp的思想就是先算小区间再 阅读全文
posted @ 2018-08-26 22:19 CaptainLi 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 传送门 这道题第一眼看上去可能让人以为是贪心……不过贪心并不行,因为每次的操作是有2的幂次方的权值的。这样的话直接每次贪心最小的就目光短浅。所以那我们自然想到了DP。 据说这是一道很正常的区间DP? 区间DP的基本思想,就是先处理出小区间的最优解,再由多个小区间合并成一个大区间。 不过这道题的想法略 阅读全文
posted @ 2018-08-26 22:02 CaptainLi 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 传送门 好像是一道非常神仙的题…… 本题中具体的概念可以参见CDQ大神的论文:弦图与区间图 我们直接来说吧。 从这道题中的描述可以看出,由所有人向其认识的人连一条边,构成的是一张标准的弦图。而题目要求我们求出这张弦图的最小染色数。 有一个非常重要的定理:对于一张弦图,团数 = 色数(这个证明很难懂不 阅读全文
posted @ 2018-08-25 16:18 CaptainLi 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 传送门 这道题的题目描述好像很奇怪……不过想了一下,应该要求的是每个做出来的箱子是不能有空的。(否则的话这题也太简单了) 朴素的DP方程很好想,设sum[i]为前i个物品的长度之和,方程就是dp[i] = min(dp[j] + (sum[i] - sum[j] + i - j - 1) ^ 2) 阅读全文
posted @ 2018-08-25 15:56 CaptainLi 阅读(149) 评论(0) 推荐(0) 编辑