动态规划
文章平均质量分 67
飞猪不会飞123
ICPC区域赛银,2年算法竞赛辅导经历。北京师范大学计算机研究生
展开
-
CF757D1-思维,数论dp
题目大意:给你一个序列aia_iai,让你将其重新排列使得∑i=1ngcd(a1,...,ai)\sum_{i=1}^{n}gcd(a_1,...,a_i)∑i=1ngcd(a1,...,ai)最大n≤1e5,ai≤5e6n \leq 1e5 , a_i \leq 5e6n≤1e5,ai≤5e6分析:最后的答案展开后值域一定是分块的,类似于a,a,a,b,b,c,c,..a,a,a,b,b,c,c,..a,a,a,b,b,c,c,..且整体值域是递减的,且任意两个数满足约数关系所以我们原创 2021-11-27 13:21:20 · 262 阅读 · 0 评论 -
CF750F1-思维dp
题目大意:给你一个序列,输出里面的所有递增子序列的异或和的集合.例如:44 2 2 4输出:40 2 4 6因为有递增子序列:0242 4他们的异或和的集合就是 0 2 4 6n≤1e5,ai≤500n \leq 1e5,a_i\leq500n≤1e5,ai≤500题目思路:朴素的思考:dp(i,j)dp(i,j)dp(i,j)代表前iii个数,是否存在递增子序列的异或和为j.但是我们需要其递增,所以贪心的让dp(i,j)dp(i,j)dp(i,j)为异或和为jjj的递增原创 2021-10-25 10:22:45 · 145 阅读 · 0 评论 -
ZOJ - 4114 Flipping Game-dp,合理状态表示
题目大意:给你两个长度为n(n≤100)n(n \leq 100)n(n≤100)的01字符串.你需要进行k(k≤100)k(k \leq 100)k(k≤100)轮操作,每次操作要选择m(m≤n)m(m\leq n)m(m≤n)个字符,将其反转。问你有多少种方案使得kkk轮之后使得第一个字符串转变成第二个字符串.题目思路:K轮之后,两个字符串相等。那么我们只需要记录当前进行到第几轮且有几个字符串不相等即可.所以定义dp(i,j)dp(i,j)dp(i,j) 为前iii轮,当前局面有恰好kkk个与原创 2021-10-17 21:01:26 · 109 阅读 · 0 评论 -
CF365-E - Mishka and Divisors,数论+dp
题目大意:给n(n≤1000)n(n \leq 1000)n(n≤1000)个数,求用最少的数相乘得到k(≤1e12)k(\leq 1e12)k(≤1e12)的倍数.题目思路:令dp(i,j)dp(i,j)dp(i,j)代表前iii个数,累乘得到jjj的倍数的最小个数(01背包)jjj只取kkk的约数。对于第iii个数,转移为:dp(i,j)=min(dp(i−1,j),dp(i−1,jgcd(ai,j))+1)dp(i,j)=min(dp(i-1,j),dp(i-1,\frac{j}{gcd(原创 2021-09-03 00:19:09 · 132 阅读 · 0 评论 -
2016CCPC网络选拔赛C-换根dp好题
题目大意:给一颗树,带点权和边权.问你每个点,得到的最大价值.(点权代表价值边权代表花费).每个点只能拿一次,边反复计算花费.题目思路:容易想出一种树形dp后换根的思路:dp(i,0/1)dp(i,0/1)dp(i,0/1)代表以iii为根的子树,最后回到/不回到i点的最大价值.dp(i,1)=∑j∈Sonimax(dp(j,1)−2∗wi,0)dp(i,1)=\sum_{j\in Son_i}max(dp(j,1)-2*w_i,0)dp(i,1)=∑j∈Sonimax(dp(j,1)−2∗w原创 2021-08-23 22:05:09 · 245 阅读 · 0 评论 -
2021上海市赛-B-排序后dp
题目大意:给你nnn个三元组(ai,bi,ci)(a_i,b_i,c_i)(ai,bi,ci).每个维度要分别选出a,b,c(a+b+c=n)a,b,c(a+b+c=n)a,b,c(a+b+c=n)个使得价值最大。题目思路:从贪心入手:如果是二元组的情况,我们只需要对b−ab-ab−a排序后贪心选b个bib_ibi再剩下的选aia_iai.将排序后的序列挖去一个子序列后依然符合贪心的性质.所以我们可以对第三个维度进行dp(i,j)dp(i,j)dp(i,j)代表前i个三元组,选了jjj个原创 2021-08-21 21:01:28 · 150 阅读 · 0 评论 -
2021上海市赛-D-卡特兰数变种,dp
题目大意:给你nnn个数,让你分成两排长度为n/2的数组ai,bia_i,b_iai,bi.然后使得两个数组有序且ai≤bia_i\leq b_iai≤bi.n≤5e3n \leq 5e3n≤5e3题目思路:如果数两两不同的话,就是一个卡特兰数.数有重复,需要dp计算。先考虑如何dpdpdp的求两两不同的情况:将其转化为括号序列。第一排看成左括号的下标,第二排看出右括号的下标。任意一个前缀状态中左括号的数量不得少于右括号的数量.这样dp(i,j)dp(i,j)dp(i,j)为前i个数原创 2021-08-21 19:44:51 · 191 阅读 · 0 评论 -
2021年ICPC银川-B-思维,dp
题目大意:给你一个长度为nnn的序列。对于每一个k,k∈[1,n]k,k\in[1,n]k,k∈[1,n].问你将其分成kkk个段,每个段的贡献为该段最大值-最小值。贡献总和最大值是多少.n≤1e3n \leq 1e3n≤1e3类似关于最短路的题目可见:我的另一个博客题目思路:贡献为最大值-最小值。让贡献总和最大化.该问题等价于:分成k段,每段选择两个数的差作为贡献。让贡献总和最大化.最优解一定是最大值-最小值。现在的问题就是如何快速的求出每一个kkk的结果.将其变成状态机模型:每个值有4种原创 2021-06-21 20:22:33 · 774 阅读 · 1 评论 -
2021蓝桥杯省赛J:括号序列-思维+动态规划
题目链接题目大意:给你一个括号序。让你添加最少的括号使得它合法,输出多少种本质不同的结果.例如:(() -> ()() , (())n≤5e3n \leq 5e3n≤5e3题目思路(from y总):有几个性质需要发现:1.最开始我们可以知道要加多少个左括号,要加多少个右括号.2.左括号和右括号的插入是独立的,可以直接方案相乘起来.解释:如果左右括号不位于同一个间隙,显然方案相乘.而就算有若干个左右括号在同一个间隙中,也一定是))..))((..(())..))((..(())..)原创 2021-06-10 09:35:06 · 5507 阅读 · 2 评论 -
小白月赛34-dd爱捣乱-dp+鸽巢定理
题目大意:给一个只含小写字母的长度为nnn的字符串,问你最小修改量使得这个字符串中不存在任意一个长度≥2\geq2≥2的回文子串n≤1e6n\leq 1e6n≤1e6题目思路:不存在长度等于2和3的回文子串即可。那么也就是任意三个相邻的数,都满足两两不等。显然有一个朴素的dp(i,j,k)dp(i,j,k)dp(i,j,k)记录最后两位的情况。复杂度为O(n∗263)O(n*26^3)O(n∗263)考虑优化:由于每个数都只与前两个和后两个数有关。那么根据鸽巢定理我们发现每个数只需要修改最多原创 2021-06-03 17:04:00 · 145 阅读 · 0 评论 -
蓝桥杯国赛-本质不同上升子序列-动态规划
题目大意:给你一个字符串,让你求有多少个本质不同的上升的子序列.例如:adca,ad,ac,d,c = 5题目思路:肯定是动态规划了,当时国赛的时候推了一个不太好想的递推+容斥,最近学到一个比较优秀的解法,都记录一下.方法一:dp+容斥懒得写了,跟他一样 点我方法二:按字符dp由于这题的字符集有限且比较小,令dp(i,j)dp(i,j)dp(i,j)代表前iii位,且以jjj为结尾的本质不同上升子序列的长度.那么转移就很好转了:a[i]≠j时,dp[i][j]=dp[i−1][j]a原创 2021-06-02 21:57:06 · 227 阅读 · 0 评论 -
入门笔记+题集:SOSdp
1.介绍: 原文链接1.1.SOSdp(Sum over subsets dpSum \ over \ subsets\ dpSum over subsets dp)顾名思义,子集和dp。用来维护子集信息的。俗称高维前缀和.1.2.最常见的形式:求解dp(mask)=∑i∈maskaidp(mask)=\sum_{i \in mask}a_idp(mask)=∑i∈maskai注意:i∈mask等价于i&mask=i等价于i∣ma原创 2021-03-12 15:12:19 · 3393 阅读 · 0 评论 -
GPLT上理选拔-L-二分答案+单调队列dp
题目大意:题目连接在一维坐标轴上给你两个点0,d0,d0,d.nnn个发电站分别位于xix_ixi.有一个统一半径rrr.你可以移动它们,花费为移动的距离。现在问你在花费不超过bbb的情况下,最小半径是多少,可以使得发电站之间连通且覆盖0到d?题目思路:半径越大,花费越小。符合单调。所以可以二分。在rrr确定的情况下,让花费不超过b.那么可以考虑求最小值。用dp处理.令dp(i,j)dp(i,j)dp(i,j)代表前i个发电站覆盖[0,j][0,j][0,j]且最后一个发电站在jjj的最小原创 2021-04-05 10:58:47 · 219 阅读 · 0 评论