随笔分类 -  动态规划

1 2 3 4 5 ··· 7 下一页
摘要:重写一遍很久以前写过的题。 考虑链上的问题。容易想到设f[i]为i到1的最少购票费用,转移有f[i]=min{f[j]+(dep[i]-dep[j])*p[i]+q[i]} (dep[i]-dep[j]<=l[i])。套路的考虑若j转移优于k(dep[j]>dep[k]),则f[j]-dep[j]* 阅读全文
posted @ 2019-05-29 21:51 Gloid 阅读(257) 评论(0) 推荐(0)
摘要:容易想到可以转化为一个有m堆石子,石子总数不超过n-m的阶梯博弈。阶梯博弈的结论是相当于只考虑奇数层石子的nim游戏。 nim和不为0不好算,于是用总方案数减掉nim和为0的方案数。然后考虑dp,按位考虑,设f[i][j]为已确定奇数石子堆的第i位及以上的放法后,保证当前异或和为0,剩下j个石子时的 阅读全文
posted @ 2019-05-08 19:22 Gloid 阅读(481) 评论(0) 推荐(0)
摘要:对作文库中的串建出广义SAM,然后显然可以二分答案,二分之后考虑暴力dp,设f[i]为前i位最长匹配长度,显然有f[i]=max(f[i-1],f[j]+i-j) (i-j>=l&&j+1~i能在作文库中匹配)。在SAM上跑并记录匹配长度,单调队列优化dp即可。 阅读全文
posted @ 2019-05-08 01:22 Gloid 阅读(187) 评论(0) 推荐(0)
摘要:对反串建SAM弄出后缀树,每个b串通过倍增定位其在后缀树上对应的节点,根据其长度将节点拆开。然后每个a串也找到对应的节点,由该节点向表示a串的节点连边,再把所给的边连上跑拓扑排序即可。 阅读全文
posted @ 2019-05-05 20:23 Gloid 阅读(236) 评论(3) 推荐(1)
摘要:https://www.cnblogs.com/Gloid/p/10629779.html 这一场的D。 阅读全文
posted @ 2019-04-17 21:47 Gloid 阅读(209) 评论(0) 推荐(0)
摘要:https://www.cnblogs.com/AwD-/p/6600650.html 阅读全文
posted @ 2019-04-12 18:23 Gloid 阅读(305) 评论(0) 推荐(0)
摘要:容易发现最终序列所有数字的相对顺序不变,一个数字可能的覆盖范围由两边第一个比它大的数决定,且若不考虑次数限制所有这样的序列都可以变换得到。对于一个序列,其需要的最少变换次数显然就是覆盖了别的位置的数的种数。于是设f[i][j][k][0/1]为第i位填了第j个数时以最优策略操作了k次,第i-1为是否 阅读全文
posted @ 2019-04-11 22:41 Gloid 阅读(171) 评论(0) 推荐(0)
摘要:将选择导师看成先选阵营再选派系,这样有显然的O(nm2)暴力,即按城市排序后,设f[i][j][k]为前i个学校中第一个阵营有j人第一个派系有k人的方案数,暴力背包。 对于k=0,可以发现选阵营和选派系是两个独立的过程。于是O(nm)暴力背包再将方案数相乘即可。 考虑原题,注意到如果一个城市不包含有 阅读全文
posted @ 2019-04-10 20:51 Gloid 阅读(237) 评论(0) 推荐(0)
摘要:设f[S]为S点集是SCC的方案数。考虑通过去掉不合法方案转移。可以枚举入度为0的SCC所含点集S',这样显然S^S'内部的边和由S'连向S^S'的边删还是不删任选。但是这样无法保证S'包含所有入度为0的SCC,于是考虑容斥,瞎猜可以得到容斥系数与SCC数量有关,于是设g[i][S]为S包含i个无关 阅读全文
posted @ 2019-04-04 00:32 Gloid 阅读(294) 评论(0) 推荐(0)
摘要:因为一大堆式子实在懒得写题解了。首先用prufer推出CF917D用到的结论,然后具体见前言不搭后语的注释。 阅读全文
posted @ 2019-03-30 19:05 Gloid 阅读(239) 评论(0) 推荐(0)
摘要:考虑建一棵小根堆笛卡尔树,即每次在当前区间中找到最小值,以最小值为界分割区间,由当前最小值所在位置向两边区间最小值所在位置连边,递归建树。那么该笛卡尔树中的一棵子树对应序列的一个连续区间,且根的权值是这段区间的最小值。 在笛卡尔树上跑树形dp。设f[i][j]为在i子树对应棋盘中放j个车的方案数,且 阅读全文
posted @ 2019-03-29 20:32 Gloid 阅读(279) 评论(0) 推荐(0)
摘要:考虑第一问的部分分。显然设f[i]为i子树从根开始扩展的所需步数,考虑根节点的扩展顺序,显然应该按儿子子树所需步数从大到小进行扩展,将其排序即可。 要做到n=3e5,考虑换根dp。计算某点答案时先将其在父亲中的贡献去掉,然后用和之前同样的方法做即可。冷静一下也没什么复杂的。 第二问注意到两个点扩展出 阅读全文
posted @ 2019-02-14 22:59 Gloid 阅读(227) 评论(0) 推荐(0)
摘要:考虑按顺序暴搜子序列。如果序列中的数两两不同,显然每次给上一个找到的子序列添上后缀最小值,即为下一个要找的子序列。如果不能再加了就回溯继续考虑后缀次小、第三小……值,直到找到k个子序列。 有重复的数后,考虑后缀k小值只取第一次出现的位置,并在每找到一个子序列后就统计其出现次数。显然这样就能找到所有要 阅读全文
posted @ 2019-02-14 19:09 Gloid 阅读(289) 评论(1) 推荐(0)
摘要:假设已经求出了i个点j个桥的连通图数量f[i][j],容易由此推出最终答案,套路地枚举1号点所在连通块大小即可。 假设已经求出了i个点的边双连通图数量h[i],考虑由此推出f[i][j]。可以枚举其中一座桥将图划分成两个部分,固定1号点在其中一端,将桥两端的部分方案数相乘即可。这样每种方案被考虑的次 阅读全文
posted @ 2019-02-13 21:13 Gloid 阅读(183) 评论(0) 推荐(0)
摘要:容易想到固定第一个排列为1~n,算出答案后乘上n!即可,但这样就离正解走远了。 考虑排列dp的一般套路,将数从大到小加入排列,这样每个位置第一次填数时(不管是第一个还是第二个排列)其贡献就确定了。 显然当前两个排列有用的信息仅仅是两个排列都填了、仅第一个排列填了、仅第二个排列填了、两个排列都没填的位 阅读全文
posted @ 2019-02-12 18:17 Gloid 阅读(131) 评论(0) 推荐(0)
摘要:首先只有一份图时显然可以状压dp,即f[S][i]表示S子集的哈密顿路以i为终点的方案数,枚举下个点转移。 考虑容斥,我们枚举至少有多少条原图中存在的边(即不合法边)被选进了哈密顿路,统计出这个情况下的哈密顿路数量就可以容斥了。 考虑暴力,显然是枚举在每张图中选择了哪些不合法边。注意到当固定了某些边 阅读全文
posted @ 2019-02-11 22:23 Gloid 阅读(251) 评论(0) 推荐(0)
摘要:大胆猜想答案随k变化是凸函数,且有决策单调性即可。去粘了份fread快读板子才过。 阅读全文
posted @ 2019-01-17 17:05 Gloid 阅读(176) 评论(0) 推荐(0)
摘要:设f[i]为前i行的最小不协调度,转移枚举这一行从哪开始,显然有f[i]=min{f[j]+abs(s[i]-s[j]+i-j-1-m)p}。大胆猜想有决策单调性就好了。证明看起来很麻烦,从略。注意需要全程long double。 阅读全文
posted @ 2019-01-15 18:19 Gloid 阅读(250) 评论(0) 推荐(0)
摘要:按卖出时间排序后,设f[i]为买下第i台机器后的当前最大收益,则显然有f[i]=max{f[j]+gj*(di-dj-1)+rj-pi},且若此值<0,应设为-inf以表示无法购买第i台机器。 考虑优化,显然是一个斜率优化式子,设j转移优于k,则f[j]+gj(di-dj-1)+rj>f[k]+gk 阅读全文
posted @ 2019-01-15 01:53 Gloid 阅读(262) 评论(0) 推荐(0)
摘要:合法条件为所有划分出的子图均不存在欧拉回路或不连通,也即至少存在一个度数为奇数的点或不连通。显然可以对每个点集预处理是否合法,然后就不用管这个奇怪的条件了。 考虑状压dp。设f[S]为S集合所有划分方案的满意度之和,枚举子集转移,则有f[S]=Σg[S']*f[S^S']*(sum[S']/sum[ 阅读全文
posted @ 2019-01-14 22:30 Gloid 阅读(150) 评论(0) 推荐(0)

1 2 3 4 5 ··· 7 下一页