随笔分类 -  算法->DP

一些没有什么特定类别的dp
摘要:"原题链接" 题目大意是有N个数,分成K段,每一段的花费是这个数里相同的数的数对个数,要求花费最小 如果只是区间里相同数对个数的话,莫队就够了 而这里是!边单调性优化边莫队(只是类似莫队)!而移动的次数和分治的复杂度是一样的! 这个时候就不能用单调栈+二分了,得用分治 分治的方法就是$Solve(l 阅读全文
posted @ 2019-07-05 20:36 sigongzi 阅读(613) 评论(0) 推荐(0)
摘要:"【51nod】2591 最终讨伐" 敲51nod是啥评测机啊,好几次都编译超时然后同一份代码莫名奇妙在众多0ms中忽然超时 这道题很简单就是$M$名既被诅咒也有石头的人,要么就把石头给没有石头被诅咒的人,然后互换身份,要么就找一些人构成一个置换圈,内部消化,$N$名有石头没诅咒的人不能把石头给M, 阅读全文
posted @ 2019-06-19 17:12 sigongzi 阅读(216) 评论(0) 推荐(0)
摘要:51nod 2589 快速讨伐 又是一道倒着推改变世界的题。。。 从后往前考虑,设$dp[i][j]$表示还有$i$个1和$j$个$2$没有填,那么填一个1的话直接转移过来 $dp[i][j] \rightarrow dp[i 1][j]$ 如果填一个$2$要把$A[j]$的那些敌人都扔在这个2的后 阅读全文
posted @ 2019-06-19 11:09 sigongzi 阅读(349) 评论(0) 推荐(0)
摘要:LOJ 3042. 「ZJOI2019」麻将 如何判定一个集合牌有没有胡的子集是不是胡的 就用一个$dp[j][k][0/1]$表示有j个连续两个的串,有k个连续1个串,有没有对子,再记一下这个集合里的牌大于等于2的花色数有几个 我们把$dp[j][k][0/1]$和大于等于2的花色数作为一副牌的状 阅读全文
posted @ 2019-06-01 14:06 sigongzi 阅读(513) 评论(0) 推荐(0)
摘要:题解 显然有个很暴力的dp,$dp[i][j]$表示选到第$i$个数,末尾的数是$j$的方案数 但是第二维就开不下了,怎么办呢 考虑离散化整个区间,我们记录$dp[i][j][k]$表示选到第$i$个点,选到第$j$个区间,这个区间选了$k$个数 转移的时候记录一个$sum[j][k]$表示$i 1 阅读全文
posted @ 2018-12-18 18:43 sigongzi 阅读(557) 评论(0) 推荐(0)
摘要:题解 这计数题多水啊我怎么调了那么久啊 我不想老年化啊QAQ (注意这里的二叉树带标号) 考虑$g[i]$表示$i$个点二叉树所有节点的深度和,$f[i]$表示$i$个点的二叉树两两节点之间的路径和 $h[i]$表示$i$个点的二叉树的方案数(实际上就是$i!$= =) 对于一个$f[i]$枚举左儿 阅读全文
posted @ 2018-11-29 21:36 sigongzi 阅读(278) 评论(0) 推荐(1)
摘要:题解 这个出题人完美诠释了什么叫 用心出题,用脚造数据 算完复杂度怎么也得$O(o^2 200)$略微跑不满,但是有8个测试点虽然有障碍但是一个障碍都不在路径上,2个测试点只有10来个点在路径上 这么轻松愉快的嘛???? 如果没有障碍的话只和$1$的数量有关 那么我们设$dp[i][j][k]$表示 阅读全文
posted @ 2018-11-29 08:32 sigongzi 阅读(642) 评论(0) 推荐(0)
摘要:题解 复杂度怎么算也要2s的题怎么0.5s就跑完了,迷啊 这个题简直算完复杂度不敢写,写了就赚飞了好吧 根据裴蜀定理,显然选出的数和P的gcd是w的约数 我们考虑枚举$P$的约数,上限当然是$\sqrt{P}$个,写个暴力搜一下发现最多也就13000个左右 然后我们把每个数处理成$gcd(a_i,P 阅读全文
posted @ 2018-11-28 08:15 sigongzi 阅读(260) 评论(0) 推荐(1)
摘要:题解 我不会打表找规律啊QAQ 规律就是 对于$n = m$我们每一条左下到右上的对角线上的点的走法都是一样的且每n步一个轮重复 对于$n != m$我们找到最大公约数$d$,在每个$d d$的方格里满足左上到右下的对角线点的走法一样且d轮一个重复 然后枚举$dx$,$dy = d dx$,我们要满 阅读全文
posted @ 2018-11-26 14:35 sigongzi 阅读(437) 评论(0) 推荐(0)
摘要:题解 如果只是一棵树的话,那么就枚举每条边,分成两部分大小为$a$和$b$ 那么这条边被统计的方案数是$(2^a 1)(2^b 1)$ 如果是一个环的话,我们枚举环上至少有$N i$条边的方案数$T(N i)$ $\sum_{i = 1}^{N 1}T(N i)$ 先枚举一个$i$ 就是枚举$[1, 阅读全文
posted @ 2018-11-23 11:29 sigongzi 阅读(341) 评论(0) 推荐(0)
摘要:"题面" 还有这么诚实的出题人! 我们最多影响20个点,然后把这20个点的虚树建出来,并且枚举每个点的选举状态,如果一个点选或不选可以通过改$dp[u][0] = 0$或$dp[u][1] = 0$完成 状态应该不多,因为每条边只有三种选的情况,上限是$3^{m n + 1}$的 然后我们考虑递推出 阅读全文
posted @ 2018-11-16 17:35 sigongzi 阅读(498) 评论(0) 推荐(0)
摘要:题解 随机跳题真好玩 这个就是考虑我们怎么判断点在多边形内,就是点做一条射线,穿过了奇数条边 我们只需要记录一个二进制状态表示每个点的射线穿过路径的次数的奇偶性 枚举起点,然后用BFS的方式更新dp状态 代码 cpp include define fi first define se second 阅读全文
posted @ 2018-10-30 18:16 sigongzi 阅读(265) 评论(0) 推荐(0)
摘要:C Minimization 每次操作必然包含一个1 枚举第一次操作的位置计算两边即可 代码 D Snuke Numbers 我们对于N 只要能求出$f(N + 1)$($f(x)$表示大于等于$x$的数中$\frac{x}{S(x)}$最小的那个) 那么就能不断找到下一个数了 怎么求呢,我们可以认 阅读全文
posted @ 2018-10-20 13:12 sigongzi 阅读(483) 评论(0) 推荐(0)
摘要:A Two Abbreviations 如果有最小答案的话这个答案一定是N和M的lcm 我们考虑一下什么情况下 $k \frac{L}{N} = h \frac{L}{M}$且$k,g$互质 显然是在$k = \frac{N}{gcd(N,M)},h = \frac{M}{gcd(N,M)}$的时候 阅读全文
posted @ 2018-10-17 17:36 sigongzi 阅读(443) 评论(0) 推荐(0)
摘要:C Linear Approximation 找出$A_i i$的中位数作为$b$即可 题解 cpp include include include include include // define ivorysi define fi first define se second define M 阅读全文
posted @ 2018-10-14 12:51 sigongzi 阅读(401) 评论(1) 推荐(0)
摘要:C Candles 题解 点燃的一定是连续的一段,枚举左端点即可 代码 D Median of Medians 二分一个值作为中位数的中位数,把大于这个数的设成1,小于等于这个数的设成0 然后我们就需要知道小于等于这个数做中位数的区间有多少个,用树状数组维护,和全部区间个数的一半比较一下即可 题解 阅读全文
posted @ 2018-10-12 22:14 sigongzi 阅读(365) 评论(0) 推荐(0)
摘要:A Colorful Slimes 2 找相同颜色的一段,然后答案加上段长除2下取整 代码 C String Coloring 题解 直接折半搜索即可 用哈希表维护前半部分拆分方式的两个字符串的哈希值 再枚举后一半的拆分方式查哈希表即可 代码 D Histogram Coloring 题解 我们考虑 阅读全文
posted @ 2018-10-11 21:51 sigongzi 阅读(301) 评论(0) 推荐(0)
摘要:题解 把所有的数组一开始就FWT好然后再IFWT回去可以减小常数 从13s跑到0.7s…… 可以参照immortalCO的论文,感受一下毒瘤的动态动态DP 就是用数据结构维护线性递推的矩阵的乘积 由于所有轻儿子$F(z) + z^{0}$的乘积做除法太麻烦,我们用一个线段树维护每个点所有的轻儿子即可 阅读全文
posted @ 2018-10-03 13:19 sigongzi 阅读(626) 评论(0) 推荐(0)
摘要:题解 显然权值都是正的,我们最深的那个点一定延伸到了某个叶子 我们抛去这条链之外再选K个点即可 如果直接对一棵树选K个点,满足这样的依赖关系,可以通过一个后序遍历的顺序做出来 转移方法是 $dp[i][j] = dp[i 1][k] + (j k) v$ 或者 $dp[i][j] = dp[i si 阅读全文
posted @ 2018-10-02 16:26 sigongzi 阅读(309) 评论(0) 推荐(0)
摘要:C Triangular Relationship 题解 枚举一个数%K的值然后统计另两个 代码 F Revenge of BBuBBBlesort! 题解 我们按照逆操作考虑,容易发现是1 N顺序排列 每次交换$a_{i 1} include include include define ente 阅读全文
posted @ 2018-09-24 20:31 sigongzi 阅读(510) 评论(0) 推荐(0)