随笔分类 -  dp

摘要:"嘟嘟嘟" 一道比较有意思的dp。 这题关键在于状态的设计。如果像我一样令$dp[i][j]$表示选到第$i$个物品,$\sum c$能都等于$j$的话,那就是$O(qnk)$了,怒拿一半分…… 正解应该是令$dp[i][j]$表示选出的物品的$a$小于等于$i$,$\sum c$等于$j$时,$b 阅读全文
posted @ 2019-03-31 10:07 mrclr 阅读(204) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 正如某题解所说,这题很有误导性:我就一直在想凸包。 随便一个数据,就能把凸包hack掉: 这样我们的点G就gg了。 所以正解是什么呢?dp。 题解看这位老哥的吧,我感觉挺好懂的: "题解 P4563 【[JXOI2018]守卫】" c++ include include include 阅读全文
posted @ 2019-03-20 18:59 mrclr 阅读(248) 评论(0) 推荐(0)
摘要:嘟嘟嘟 现在看到字符串就想到SAM,所以很担心kmp啥的会不会忘了…… 这题感觉挺暴力的:首先当然要把$s$建成SAM,然后令$dp[i][j]$表示到第$i$组时,SAM上节点$j$能匹配的字符串个数。 转移的时候暴力枚举起点节点$p$,然后每一次都把当前字符串放上去跑,如果在SAM上存在的话,令 阅读全文
posted @ 2019-03-18 17:58 mrclr 阅读(461) 评论(0) 推荐(1)
摘要:"嘟嘟嘟" 这题乍一看挺水的,似乎和选课一样,但其实不太一样,因为,他有环。 但这也并没有多难,我先说正解,然后分享一下我奇特的错误算法。 正解很好想,因为环中的点是不必须选的(没错,只有环中的点),因此用tarjan缩点,然后重新建图,跑树形dp就行了。 我的奇特想法是啥咧?我不知咋想的,认为只要 阅读全文
posted @ 2019-03-07 17:57 mrclr 阅读(153) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 这题就比较有意思了,十分锻炼思维。 首先得学会转化,对于题中“有$a_i$个人比我高,$b_i$个人比我低”,相当于排在第$a_i + 1$到$n b_i$位的人和我分数相同。 因此我们就把每一个人说的话变成了一段区间,那么说真话的人肯定是所有不相交的区间。乍一看就变成了 "区间覆盖" 阅读全文
posted @ 2019-03-06 15:36 mrclr 阅读(153) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 这题刚开始想复杂了,想什么dp去了,其实没那么难。 考虑断掉一条边,记分离出来的两棵子树为A和B,那么合并后的树的直径可能有三种情况: 1.A的直径。 2.B的直径 3.A的半径+边权+B的半径。 半径是啥?记从点$i$出发到树上任意一点的最长距离为$f[i]$,则树的半径就是$min 阅读全文
posted @ 2019-03-04 15:54 mrclr 阅读(264) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 这题其实还是比较好想的,就是有一个小坑点。 首先钩子多的排在前面,然后就是dp了。 dp方程就是$dp[i][j]$表示到了第$i$建物品,还剩$j$个挂钩的最大喜悦值。转移就很显然了:$dp[i][j] = max \{dp[i 1][j + 1 a[i]] + b[i] \}$。 然 阅读全文
posted @ 2019-03-04 13:22 mrclr 阅读(184) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 这题一看就是数位dp。 我写数位dp,一般是按数位dp的格式写一个爆搜,然后加一点记忆化。 不过其实我一直不是很清楚记忆化是怎么加,感觉就是把dfs里的参数都扔到dp数组里,好像很暴力啊。 这题有一个坑点就是数字必须是电话号码,也就是11位且没有前导零。因此关于前导零的处理是最高位不能为 阅读全文
posted @ 2019-03-02 13:34 mrclr 阅读(177) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 这题大意就是有一个DAG,然后添加了一条边,求上有多少种生成树。 这题想了半天,最后还是写了暴力。暴力就是$O(2 ^ mn)$的那种,还出锅了几次:刚开始我不想dfs判断选出的边是否构成树,于是yy了一下,以为只要边数为$n 1$,除了根节点每个点的入度为1且都被访问过就行了。却忘了有 阅读全文
posted @ 2019-03-01 19:21 mrclr 阅读(326) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 裸的矩阵快速幂,构造一个$(k + 1) (k + 1)$的矩阵,把sum[n]也放到矩阵里面就行了。 c++ include include include include include include include include include include using na 阅读全文
posted @ 2019-02-28 22:13 mrclr 阅读(174) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 这题真是一道好题。 看到题中的限制,我就一直想dp,可是设出来的状态都无法转移,最后还是看题解了。 题解真是妙,太妙了。 就是我们构造一个矩阵,满足$a[i][j] = a[i][j 1] 2(j 1), a[i][1] = a[i 1][1] 3$。这个矩阵最大不过$12 18$,于是 阅读全文
posted @ 2019-02-25 11:22 mrclr 阅读(247) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 要是求交错序列的个数和就好了,那我一秒就能切。 换成这个,我就不会了。 我一直想枚举1的个数,然后算出在长度为$n$的序列里,有多少个合法的序列,然后又觉得这好像是什么插板法,但是每一个盒子里必须有球,还不会。查了一下发现这东西$O(1)$还求不了,于是彻底放弃了。 正解是这样的,首先还 阅读全文
posted @ 2019-02-24 08:59 mrclr 阅读(266) 评论(1) 推荐(1)
摘要:"嘟嘟嘟" 首先问题可以转化一下,变成在$[ \lceil \frac{L}{k} \rceil, \lfloor \frac{R}{k} \rfloor]$中选取$n$个数,使这些数的gcd等于1. 以下的$L$和$R$都是除完$k$的。 但这样做的复杂度是$O(R)$的,过不了。 这时候考虑到一 阅读全文
posted @ 2019-02-22 09:50 mrclr 阅读(284) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 啊我好菜啊,dp从来都做不出来…… 这题我换了好几种状态但就是和题解不一样…… 首先明确的一点是,每行每列最多有两个棋子,然后放置的方案数和顺序是无关的。所以没必要记录是怎么放的。 令dp[i][j][k]表示共$i$行,有$j$列放了1个棋子,有$k$列放了2个棋子(剩下的列就是没放棋 阅读全文
posted @ 2019-02-21 16:21 mrclr 阅读(191) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 首先有一个dp很好想:dp[i][j]表示前$i$所学校中,第$i$所学校派出了$j$艘划艇的方案数、 然后$O(n ^ 2)$枚举就行了。 但问题是$j$太大了。一般对于大的数,都可以考虑离散化,dp这里也可行。 离散化后,所有的数就被分成一段段的。令dp[i][j]表示前$i$所学校 阅读全文
posted @ 2019-02-19 15:36 mrclr 阅读(275) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 这题真的有点神。 首先50分是送的,对于所有$n = k$的情况,直接从后往前扫一遍,碰到一盏灯亮着,就$O(\sqrt n)$操作一次。复杂度上界$O(n \sqrt n)$,但根本达不到。 接着我就想不出来了,题解看了好多篇才懂。 首先要观察出来的是,第$i$个开关的操作只会影响小于 阅读全文
posted @ 2019-02-18 15:11 mrclr 阅读(165) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 这题感觉真的很简单…… $O(n ^ 2 logn)$的做法特别好理解,但得开O2。 看数据范围,肯定是状压dp。但刚开始我没想通状压啥,因为点与点之间还有顺序问题。但后来发现这个顺序是子问题,转移的时候只用记录最后一个点。 所以dp[i][j]表示选的点集为$i$,最后一个点为$j$的 阅读全文
posted @ 2019-02-17 11:24 mrclr 阅读(164) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 翻某(些)人的做题记录看到这道题的。 知道是期望dp,但就是没想出来,看题解后才知道是状态设的不好。“良好的状态是AC的一半啊……” 我设的是dp[i][j]表示第$i$个人在$j$轮后出招的概率,而题解是$r$轮后,前$i$个人中有$j$个人出招的概率。 剩下的我感觉题解讲的非常清楚, 阅读全文
posted @ 2019-02-14 14:09 mrclr 阅读(183) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 贪心+dp。 首先贪心很容易想到,把吃饭时间长的人排在前面。因为打饭时间的顺序对最终答案没有影响,所以可以以吃饭时间为关键字排序。 然后就是dp了(我当时还自信满满的贪心交了一发……显然WA啊) 设dp[i][j]表示前$i$个人在第一个窗口打饭的时间为$j$时所需要的最少总时间。 为什 阅读全文
posted @ 2019-02-14 10:07 mrclr 阅读(125) 评论(0) 推荐(0)
摘要:最近刷题的同时还得填填坑,说来你们也不信,我还不会数位dp。 照例推几篇博客: "数位DP讲解" "数位dp 的简单入门" 这两篇博客讲的都很好,不过代码推荐记搜的形式,不仅易于理解,还短。 数位dp的式子一般是这样的:dp[i][][]表示到第$i$位,而后面几维就因题而异了。 不过通用的思想就是 阅读全文
posted @ 2019-02-13 08:39 mrclr 阅读(176) 评论(0) 推荐(0)