随笔分类 -  dp

1
摘要:题目链接: "Click here" Solution: 设$f[i]$表示当$d=i$时的答案,$c[i]$表示$a$序列中有多少个$i$的倍数 首先我们要使恰好$k$个数互不相同,则表示其他$n k$个数恰好相同,那么有${c[i]\choose n k}$种方案 考虑剩下的$c[i] n+k$ 阅读全文
posted @ 2020-01-29 23:48 DQY_dqy 阅读(183) 评论(0) 推荐(0)
摘要:题目链接: "Click here" Solution: 考虑dp,$f[i][j]$表示已经确定了$i$位,当前匹配到第$j$位的方案数 给出的字符串是固定,不难发现我们每次转移的方程也是一个与上次状态无关的固定的东西 $$ f[i][j]=\sum_{k=0} ^{m 1} f[i 1][k]\ 阅读全文
posted @ 2020-01-21 12:00 DQY_dqy 阅读(160) 评论(0) 推荐(0)
摘要:题面链接: "Click here" Solution: 看到这个式子,直接算显然是不好算的,不妨考虑式子的组合意义 我们知道${n+m \choose m}$可以表示从(0,0)走到(n,m)只能向右和向上的方案数,那么${a_i+b_i+a_j+b_j \choose a_i+a_j}$也是同理 阅读全文
posted @ 2020-01-20 17:02 DQY_dqy 阅读(183) 评论(0) 推荐(0)
摘要:题目链接: "Click here" Solution: 我们把问题转化一下,改成可以放白球和其他颜色的球 那么对于一种合法的方案,显然有它的任意一个前缀的白球数大于等于其他颜色数 那么,我们考虑设$f[i][j]$表示已经放了$i$个白球,刚好放完了$j$种颜色的方案数 考虑有两种转移,一种是我们 阅读全文
posted @ 2020-01-19 17:32 DQY_dqy 阅读(204) 评论(0) 推荐(0)
摘要:题目链接: "Click here" Solution: 设$f(x)$代表第$x$个人送的礼物的数量,$s(x)$代表$f(x)$的前缀和,即: $$ f(x)=s(x 1)+x^k\\ s(x)=s(x 1)+f(x)\\ s(x)=2\times s(x 1)+x^k $$ 则我们只需求出$s 阅读全文
posted @ 2019-11-12 11:52 DQY_dqy 阅读(132) 评论(0) 推荐(0)
摘要:题目链接: "Click here" Solution: 注意到每个点的决策都是一定的,我们排序后通过双向链表来处理这个东西 设$A[i][j]$表示从$i$出发,走了$2^j$轮时$A$开车的距离,$B[i][j]$同理 $f[i][j]$则表示$2^j$轮后的位置,倍增优化dp即可 Code: 阅读全文
posted @ 2019-11-02 11:06 DQY_dqy 阅读(129) 评论(0) 推荐(0)
摘要:题目链接: "Click here" Solution: 我们设$f[l][r][x][y]$表示在原区间$l\sim r$ 内还未被取走的值最大为$x$最小为$y$时的代价,这里我们只考虑区间$l \sim r$ 我们再用$g[l][r]$表示将原区间$l\sim r $里的数全部取完的最小代价, 阅读全文
posted @ 2019-10-13 11:51 DQY_dqy 阅读(129) 评论(0) 推荐(0)
摘要:题目链接: "Click here" Solution: 直接做似乎不太可行,我们考虑二分 我们设$f[x]$表示以$x$为根的子树中选择了的节点到$x$的距离的最小值,初值为$inf$ $g[x]$则表示以$x$为根的子树中还未覆盖的关键点到$x$的距离的最大值,初值为$ inf$ 考虑如何转移, 阅读全文
posted @ 2019-10-04 11:20 DQY_dqy 阅读(144) 评论(0) 推荐(1)
摘要:题目链接: "Click here" Solution: 看起来是贪心,其实不然。。。 我们定义$f[i]$表示 仅 覆盖$1\sim i$所需要的最小代价,那么对$i$为0的点来说,易得$f[i]=min(f[i],f[i 1]+i)$ 考虑当$i$为1时怎么办,当$i$为1时,根据定义,我们不转 阅读全文
posted @ 2019-09-23 15:00 DQY_dqy 阅读(176) 评论(0) 推荐(0)
摘要:题面描述: 数据范围: Solution: 我们发现$v$很小,但是$M$很大,考虑转化一下一般的背包 我们用$f[v]$来表示拿到价值为$v$的物品需要付出的最少代价,特别的,当$v$无法被凑出来,它需要用获得更大价值的代价来填充 那么此时我们发现,他是一个单调上升的函数,则我们把物品和询问按照时 阅读全文
posted @ 2019-09-21 12:16 DQY_dqy 阅读(185) 评论(0) 推荐(0)
摘要:题目链接: "Click here" Solution: 统计方案,第一时间就应该想到dp 设$f[i][j][k][0/1]$表示在$A$串到第$i$个位置,现在要匹配$B$串的第$j$个位置,拿出了$k$个子串的方案 其中最后一维表示$i$这个位置选不选,易得初始状态$f[i][0][0][0] 阅读全文
posted @ 2019-09-14 16:06 DQY_dqy 阅读(104) 评论(0) 推荐(0)
摘要:题目链接: "Click here" Solution: 题目描述十分冗长,实际上就是给你一棵树,问你最少增加多少次边权,使得所有叶子节点到根节点距离相等 有一个十分显然的结论:最后的距离为不增加边权的最大距离 则我们可设$f[x]$表示$x$节点与$fa[x]$相连的边需要加多少权值 易得状态转移 阅读全文
posted @ 2019-09-07 19:54 DQY_dqy 阅读(100) 评论(0) 推荐(0)
摘要:题目链接: "Click here" Solution: 设$f[i][j]$表示以$i$为根的子树保留$j$条边的最大值 得到转移式:$f[i][j]=max(f[i][j],f[i][j k 1]+f[son_i][k]+val[i][son_i])$ 用vector来存每个点的儿子,倒着转移即 阅读全文
posted @ 2019-09-06 13:17 DQY_dqy 阅读(94) 评论(0) 推荐(0)
摘要:题目链接: "Click here" Solution: 我们设$f[i]$表示我们把$i$单独划分出来后的对总答案的最小代价,$c[i]$表示花费的前缀和,$t[i]$表示时间的前缀和 $$ f[i]=f[j]+t[i]\times (c[i] c[j])+S\times (c[n] c[j])\ 阅读全文
posted @ 2019-07-29 16:53 DQY_dqy 阅读(160) 评论(0) 推荐(2)
摘要:题目链接: "Click here" Solution: 首先我们要知道,选择两个点$A,B$,必定存在一条边,割掉这条边,两个集合分别归$A,B$管 再结合题目,我们就得到了一个暴力的$n^2$做法:枚举个每条边,分别对两棵树求带权重心,更新答案 但这显然是过不了这道题的,考虑对求带权重心的过程进 阅读全文
posted @ 2019-07-14 19:40 DQY_dqy 阅读(178) 评论(0) 推荐(1)
摘要:题目链接: "Click here" Solution: 设f[x]表示要使x向它的父亲写信需要花的最少的钱,per[x]为要使x向它的父亲写信最少要多少人 则$f[x]=\sum_{i=1}^{per[x]}f[son[x]]$,此时的f数组是从小到大排过序的 那我们只需要把每个点的儿子放到mul 阅读全文
posted @ 2019-07-05 21:28 DQY_dqy 阅读(151) 评论(1) 推荐(1)
摘要:01背包: 问题:有N件物品和一个容量为V的背包。第i件物品的体积是w[i],价值是v[i]。求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大。 思路:对每种物品我们可以选择用或不用,则有状态转移方程$f[i][j]=max(f[i 1][j w[i]]+v[i],f[i] 阅读全文
posted @ 2019-05-12 11:18 DQY_dqy 阅读(136) 评论(0) 推荐(1)
摘要:题目链接: "点这里" Solution: 刚开始以为是博弈论,然而不是。。。 首先考虑n方dp,设f(l,r)为只有$l$到$r$区间的钱的先手最大获利 那么我们可以得到式子f(l,r)=sum(l,r) min(f(l+1,r),f(l,r 1)),代表取左还是右 代码写出来是这样的: 不过这道 阅读全文
posted @ 2019-05-09 18:00 DQY_dqy 阅读(213) 评论(0) 推荐(2)
摘要:题目链接:[QAQ][1] 大致题意:有一个m行n列的矩阵,用1 2的骨牌(可横放或竖放)完全覆盖,骨牌不能重叠,有多少种不同的覆盖的方法? Solution: $n,m\le11$,肯定是不能暴力的,又类似棋盘问题,一下就能想到状压dp 对于每一列(或每一行)的状态用二进制表示,0表示放了,1表示 阅读全文
posted @ 2019-02-15 21:08 DQY_dqy 阅读(275) 评论(0) 推荐(1)
摘要:最近想复习dp,于是先来水一篇博客。。。 如何来求一个一串长度为$n$的数列的最长不下降子序列呢? 设$dp[i]$表示所有长度为$i$的不下降子序列的最小结尾数字。 也就是说$dp[i]=\{min(j)|len[j]=i\}$,$len[j]$表示以$j$结尾的不下降子序列长度(实际代码并不要用 阅读全文
posted @ 2019-01-30 19:52 DQY_dqy 阅读(308) 评论(0) 推荐(0)

1