随笔分类 -  DP

摘要:题目链接 题解 可以发现,字符串子序列并集的大小即为 \(f\) 函数,并集可以由交集容斥得出,因此考虑交集。对于字符串 \(s_i\) ,\(f(s_i)=\sum\limits_{x='a'}^{'z'}(cnt_{i,x}+1)\),其中 \(cnt_{i,x}\) 表示字符 \(x\) 在 阅读全文
posted @ 2022-03-18 09:01 violet_holmes 阅读(86) 评论(1) 推荐(0)
摘要:题解 设dp状态$dp[i][j]$表示前$i$行黑色单元格间列数(含黑色)单调不降且第$i$行列数为$j$的方案数,也就是$t$行及以上部分的方案数。因为洞的左右位置不影响它的形态,所以只需记录列数而非左右端点。\(dp[i][j]=\sum\limits_{k=2}^mdp[i-1][k]\ti 阅读全文
posted @ 2021-10-11 18:06 violet_holmes 阅读(56) 评论(0) 推荐(0)
摘要:题目链接 简化题意 构造一个长度为 \(n\times m\) 的合法括号序列。第 \(i\) 个位置上的左括号代价为 \(a_{i\ mod\ n}\),右括号代价为 \(b_{i\ mod\ n}\)。求构造符合要求的括号序列的最小代价。 题解 首先,可以推出一个时间复杂度为 \(O(n^2m) 阅读全文
posted @ 2021-09-28 16:12 violet_holmes 阅读(96) 评论(1) 推荐(0)
摘要:题解 易得,两条路径一定分别通过$(1,2)\(到\)(n-1,m)\(和\)(2,1)\(到\)(n,m-1)\(的路径。因此可以算出\)(1,2)→(n-1,m)\(和\)(2,1)→(n,m-1)\(的方案数,将它们相乘,但这样会多余计算在中间有交点的情况。因为\)(1,2)→(n,m-1)\ 阅读全文
posted @ 2021-09-24 15:00 violet_holmes 阅读(51) 评论(0) 推荐(0)
摘要:题目链接 题解 不可以发现,只有$\le 3$位数才会出现非3友好的情况。证明:如果前$i$个数模$3=$前$i+1$个数模$3$,则说明第$i+1$个数可以被$3$整除。因此非3友好数的所有前缀模$3$一定不相等,根据鸽巢原理可得上述结论。 打表即可,以下代码为TLE的数位dp修改而来(。﹏。*) 阅读全文
posted @ 2021-07-20 12:46 violet_holmes 阅读(42) 评论(0) 推荐(0)
摘要:题目链接 题解 混合背包呐,约翰所付的钱为多重背包,商店的找零为完全背包。而最大容量,也就是约翰的最大花费为$T+maxn^2$。 证明:若约翰花费$>T+maxn^2$,则找零的硬币数$>maxn$,而约翰除必须付的$T$元钱外支付的硬币数也$\ge maxn$。将这两类硬币分别排序,可以得到$\ 阅读全文
posted @ 2021-07-10 10:55 violet_holmes 阅读(74) 评论(1) 推荐(2)
摘要:题目链接 题解 并不是网络流。 状态:$dp_i$表示以$1$为根节点时,$i$子树到节点$i$的最大流量。$f_i$表示以$i$为根节点时的最大流量。 转移方程:设$in_i$表示节点$i$的度数,$fa_i$表示节点$i$的父节点,$e_i$表示与节点$i$相连的边集,$v_i$表示边$i$的终 阅读全文
posted @ 2021-05-28 17:21 violet_holmes 阅读(63) 评论(0) 推荐(0)
摘要:题目链接 题目翻译 给出直线上的 \(n\) 个圆,圆心坐标为 \(c_i\)、半径为 \(r_i\)。如果若干个圆不相交(相离、相切或包含),则称这些圆符合理论。请你求出符合理论圆的最大集合。 题解 记录路径鲨我>︿< 状态:$dp[i][j]$表示离散化后(最大$2n$)的下标$[i,j]$区间 阅读全文
posted @ 2021-05-27 15:49 violet_holmes 阅读(60) 评论(0) 推荐(0)
摘要:题目链接 题解 状态奇妙的dp题。 状态:$dp[i][a][b][c]$表示匹配到$i$(注意,“匹配”表示当前目标串中所有元素仅来源于原串$[1,i]\(中的元素,而非目标串\)[1,i]$已被填满),已有$a$个a、$b$个b、$c$个c时的变化结果数。另设$nxt[i][j]\(表示\)[i 阅读全文
posted @ 2021-05-12 22:12 violet_holmes 阅读(1641) 评论(0) 推荐(0)
摘要:题目链接 题解 $m\le 5$的数据范围可以想到状压。构造矩阵$a[i][j]$,表示最后$m$个花圃状态$i$到状态$j$的方案数。初始状态dfs求出(暴力枚举状态,检验$1$(C形花圃)的数量是否$\le k$)。⭐可以发现矩阵乘法类似于Floyd的过程,枚举中转状态(\(k\)),$i→k$ 阅读全文
posted @ 2021-05-04 13:18 violet_holmes 阅读(54) 评论(0) 推荐(0)
摘要:题目链接 题解 树形dp呐。 对于节点$x$,每去向它的一个子结点,经过$x$的次数便会$+1$。因此如果最后回到$x$的话,最多可以去向$k-1$个子节点。但如果最后停留在$x$的子树当中,最多便可去向$k$个子节点。 状态:$dp[i][j]$表示以节点$i$为根的子树,是/否(\(j=1/0\ 阅读全文
posted @ 2021-05-01 10:23 violet_holmes 阅读(56) 评论(0) 推荐(0)
摘要:题目链接 题解 ⭐:有环图上的dp很可能需要多次转移,只得使用类SPFA而非Dijkstra算法 $d$数组Dijkstra预处理即可。然后建反向图,dp。 状态:$dp[i][j]$表示第i个节点是否(\(j=1/0\))已使用2操作时的答案。 转移方程: \[ dp[v][0]=min(dp[v 阅读全文
posted @ 2021-04-09 21:44 violet_holmes 阅读(62) 评论(0) 推荐(0)
摘要:题目链接 题解 ⭐:$inf$若需多次加减不宜过大,容易溢出。 dp题呐~ 状态:$dp[i][j]$表示前$i$轮距离上次(包括当前卡牌)触发双倍已经经过$j$张卡时的最大伤害。 初始值:\(dp[i][j]=inf,dp[i][0]=0\quad (0\le i\le n,1\le j\le 9 阅读全文
posted @ 2021-04-01 17:46 violet_holmes 阅读(67) 评论(0) 推荐(0)
摘要:题目链接 题解 ⭐:为保证无后效性可以尝试倒序 如果下一个盒子会猜中,便在当前盒子中停留,如此可见对于每一个起始位置,可以到达的最终位置是连续的,因此可以求出其左右端点。设娃娃要由$i$号盒子转移至$j$号盒子中(\(i<j\)),可以发现在某处停留一次与由$i-1$号盒子出发产生的后果相同,因此最 阅读全文
posted @ 2021-03-25 22:23 violet_holmes 阅读(40) 评论(0) 推荐(0)
摘要:题目链接 题解 $d$数组Dijkstra预处理即可。然后建反向图,dp。 状态:$dp[i][j]$表示第i个节点是否(\(j=1/0\))已使用2操作时的答案。 转移方程: \[ dp[v][0]=min(dp[v][0],dp[u][0]),dp[v][1]=min(dp[v][1],dp[u 阅读全文
posted @ 2021-03-25 22:21 violet_holmes 阅读(29) 评论(0) 推荐(0)
摘要:模板题:HDU1712 讲解 模型:给定n件物品,其中第i种物品体积为v[i],价值为w[i]。将这些物品划分为k组,每组物品最多选1件。求总体积不超过m的前提下,物品最大总价值。 思路:既然每组只可选一件,可以将其视作一件物品,但决策时需循环组内物品取最优。 伪代码: for ( 1 ≤ i ≤ 阅读全文
posted @ 2021-03-20 20:41 violet_holmes 阅读(47) 评论(0) 推荐(0)
摘要:题目链接 题解 ⭐:将转移条件倒推也是回溯dp路径的方法之一 可以发现,标签为1,3的节点与标签为2的节点各自互不相邻,由此想到二分图。将该图黑白染色(若无法染色则判断不可行),对于每个连通块1,3为其中一种颜色,2为其中一种颜色,如果存在大小为$n2$(或者$n3+n1$)的独立集则判断可行。连通 阅读全文
posted @ 2021-03-20 20:39 violet_holmes 阅读(49) 评论(0) 推荐(0)
摘要:题目链接 题解 ⭐:试图达到或超过某目标值的dp可以考虑背包。 将高度视作体积,吃掉所延长的生命时间视作价值,井高视作背包容量,此题即可转化为一个类背包问题。因为我们是依时间由小到大的顺序对垃圾进行决策的,因此所找到的第一个可以达到井高的垃圾,其时间一定为最短时间。 状态:$dp[i]$表示当前垃圾 阅读全文
posted @ 2021-03-15 22:25 violet_holmes 阅读(58) 评论(0) 推荐(0)
摘要:题目链接 题解 附加统计方案数与去重的类LIS问题。 状态:$dp_i$表示$[a_1,a_i]$的最长下降子序列长度,另设$sum_i$表示$[a_1,a_i]$最长下降子序列出现次数。 初始值:\(dp_i=1,sum_i=1\quad(1\le i\le n)\) 转移: \[ sum_i=s 阅读全文
posted @ 2021-03-08 22:10 violet_holmes 阅读(61) 评论(0) 推荐(0)
摘要:题目链接 题解 dp题呐,需要预处理出$sum,lst,fst$数组,$sum[l][r]\(表示区间\)[l,r]$依题意的异或值,$lst[i]$表示$a$数组中值为$i$的元素最后一次出现的下标,$fst[i]$表示$a$数组中值为$i$的元素第一次出现的下标。 状态:$dp[i]\(表示\) 阅读全文
posted @ 2021-03-08 20:13 violet_holmes 阅读(77) 评论(0) 推荐(0)