随笔分类 -  DP

摘要:传送门 唔感觉这几天换根用的好多啊,所以换根dp还是打一下好了。(虽然觉得一道题不大够的亚子) 所以大佬们有什么换根好题可以推荐一下的嗷! 这道题因为对于每一个点都要统计答案,所以要换根。 我们先考虑对于一个根我们怎么求出答案。 因为每个点到根的路径上只能有一条不良道路。 设f[i]为以i为根的子树 阅读全文
posted @ 2019-11-12 20:36 yyys 阅读(234) 评论(0) 推荐(0)
摘要:传送门 这道题还是打一下,毕竟也是一道比较经典的题。 思想值得学习:求点两两之间的距离和不如转化成看一条边会对哪些点对做出贡献。 下面以黑点为例,白点同理。 那么对于一条边(x,y) 根据乘法原理:它对黑点距离的贡献即为y子树内的黑点点数 * y子树外的黑点点数。 于是我们就要对点分配哪些点为黑点, 阅读全文
posted @ 2019-11-12 20:09 yyys 阅读(180) 评论(0) 推荐(0)
摘要:传送门 被几个数整除,等价于被他们的lcm整除。 于是想到设dp[i][j][k]表示到第i位,当前的数为j,lcm为k的数的个数。 这样空间肯定无法接受。考虑优化。 我们发现1,2,3,4,5,6,7,8,9的lcm不过是2520,我们每次把j%一下2520不会影响答案。 然后对于k这一维,直接存 阅读全文
posted @ 2019-11-12 20:02 yyys 阅读(147) 评论(0) 推荐(0)
摘要:传送门 B和C都很小,于是想到状压。 但状压的难点在于一个人吃饭的顺序会和其前面的人以及后面的人都有关。 幸而最多只会和后七个人有关,我们考虑把自己以及后七个人压成一个状态。 然后我们要知道上一次吃饭的人是谁,所以也存入状态中。只和前后七个人有关。 设dp[i][j][k]为第1个人到第i-1个人已 阅读全文
posted @ 2019-11-12 19:52 yyys 阅读(160) 评论(0) 推荐(0)
摘要:传送门 是2019.10.22(CSP模拟)T2将军令的加强版 因为在某个点见检查点还有自己的代价,而不是代价都是1,所以就不能用贪心做了。 所以这道题是神奇的树形dp。 树形dp一般自下向上,所以我们定义dp[i][j]为已经处理了以i为根的子树,还可以往上覆盖j层的最小代价。 直接转移很困难,可 阅读全文
posted @ 2019-10-22 20:35 yyys 阅读(178) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-10-14 17:05 yyys 阅读(1) 评论(0) 推荐(0)
摘要:传送门 题意是每个洒水装置的半径范围为[A,B],每头奶牛有自己的一个区间[s,e],这个区间只能由一个洒水装置覆盖。 要求整个区间[1,L](L<=1e6)不重叠的被覆盖,最少要多少个洒水装置,洒水装置的范围不可以超过整体区间的范围。 因为一个区间[s,e]只能由一个洒水装置覆盖,所以[s+1,e 阅读全文
posted @ 2019-10-09 12:05 yyys 阅读(188) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-10-09 10:23 yyys 阅读(2) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-10-08 15:52 yyys 阅读(1) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-09-28 19:40 yyys 阅读(2) 评论(0) 推荐(0)
摘要:传送门 分析得知: 每个开关最多按一次,且最优一定是从后往前按(因为对约数有影响,前面的无法再影响到后面大的) 那么可以先处理出至少需要按几次“正确”的开关(从后往前保证都是按的正确的) 有一半的数据满足 k=n,或者k大于正确按的次数,这个时候与期望无关,直接从后往前按就行。 然后考虑到与期望有关 阅读全文
posted @ 2019-09-23 19:38 yyys 阅读(207) 评论(2) 推荐(0)
摘要:传送门 神级dp(反正不是我能想到的思路) 要求活动都是时间岔开,所以两个会场选择的活动可以分成是一段一段的区间。 不妨让A选择中间连续的一段区间,B会场选择的是两段剩下的活动。 时间大但n小,所以可以先离散化。 num[l][r]表示时间[l,r]的区间内,完整的活动个数。 活动时间不计开始和结束 阅读全文
posted @ 2019-09-12 19:04 yyys 阅读(320) 评论(2) 推荐(0)
摘要:传送门 这种DP是打死我也想不到的 学习自这篇神级博客 题目抽象一下就是 所以选出的排列根据p来排序一定是这种形态: 也就是很多博客里说的M型。 我们把一条边叫做一条链,也就是相邻两个数构成的即为一条链。(s,t是不算做链的) 我们的dp就是去维护这样一个形态。 我们考虑从小到大往排列里放数,对于一 阅读全文
posted @ 2019-08-30 21:46 yyys 阅读(401) 评论(0) 推荐(1)
该文被密码保护。
posted @ 2019-08-30 18:08 yyys 阅读(1) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-08-28 17:38 yyys 阅读(1) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-08-27 17:53 yyys 阅读(0) 评论(0) 推荐(0)
摘要:传送门 戳还有集训队写的的题解~ 大概思路: 1.把c[j]乘入属性中。乘完后求的即是: 2.对于前k-1个属性和第k个属性分别讨论,即 3.枚举符号序列,最优的情况一定包含在之内 。 4.把生物按照第k个属性的大小排序,保证了后面的数第k种属性大于前面的,这样减出来第k个属性的差值一定是负值,满足 阅读全文
posted @ 2019-08-23 21:39 yyys 阅读(152) 评论(0) 推荐(0)
摘要:传送门 然鹅我并不觉得这道题很清新rua 思维巧妙!(参考) 对于第k小,我们可以这样考虑,若是第k小,那么比它小的方案应该是有k-1个。 在排列组合中,若固定i放在j位置,方案数是确定的,即:i固定在j位置,满足这个条件的序列的rank是在一个范围内的。 对于逆序对 常见思考方式是从小到大枚举数字 阅读全文
posted @ 2019-08-21 10:43 yyys 阅读(189) 评论(0) 推荐(0)
摘要:传送门 因为是求路径条数,而k的范围不大,想到用dp转移。 用f[i][j]表示从n到i的距离<=最短距离+j的方案数。 用d[i]表示从i点到n点的最短距离。 对于边<u,v,val> f[u][j]=f[v][j+d[u]-d[v]-val]。 记忆化搜索实现dp过程。 小技巧: 1.搜索时从n 阅读全文
posted @ 2019-08-21 10:43 yyys 阅读(252) 评论(0) 推荐(0)
摘要:传送门 本来是想刷数论题的,万万没想到的是,这道题题目是叫数论题,但其实它是道数位DP呢。 既然sum(i) 表示 i 的二进制表示中1的个数,而数据范围又很大,是1e15,暴力肯定是不行的。 但我们知道,肯定有很多数二进制的1的个数是一样的,考虑可不可以把问题转化成对于每一个k,找出二进制里有k个 阅读全文
posted @ 2019-08-17 22:18 yyys 阅读(184) 评论(0) 推荐(0)