随笔分类 - 各种DP
摘要:传送门 第一道插头 dp 由于讲不清楚所以假装各位早就会插头 dp 了 首先要的是一个闭合回路,所以可以用括号表示法表示状态,然后大力分类讨论 1. 没有右插头和下插头 那么我们可以啥也不干,或者加一个右插头和下插头 2. 只有下插头没有右插头 那么我们可以要把下插头继续延伸,可以向
阅读全文
摘要:传送门 dp 设 f[i][j][k] 表示初始为 k 时,能否得到 [i,j] 这一段子串 设 pd[i][j][k] 表示长度为二的字符串 ij 能否由 k 得到 然后枚举左右区间转移:有 $f[i][j][k]=[f[i][p][x]=1]\ and\ [f[p+1
阅读全文
摘要:传送门 推推式子,对于原数列 a[i],a[j] 如果要保留它们,那么它们之间的数就要改成单调上升 显然能改成单调上升的条件是 a[i]<a[j] 并且 a[j]−a[i]>=j−i ,也就是 a[j]−j>=a[i]−i 所以设 b[i]=a[i]−i,那么对于第一问就只要求
阅读全文
摘要:传送门 注意题目要求的字典序最小是指下标最小 容易想到 dp,但是发现正着做不好搞,考虑反过来搞 原本正着做是求最长上升子序列,反过来就变成求最长下降子序列 然后我们就可以求出以每个位置为起点的上升子序列的最大长度 然后直接贪心从前往后枚举即可,复杂度 O(nm) 维护最长下降子序列我是用树
阅读全文
摘要:传送门 第一个问题直接二分答案 然后第二个问题直接在二分出的答案下跑一遍 dp,设 f[i][j] 表示当前已经切了 i 次考虑完前 j 个位置并且强制切 j,j+1 时的方案数 那么有转移 f[i][j]=∑j−1k=Lf[i−1][k],发现随着 j
阅读全文
摘要:传送门 怎么好像没什么人写 dp ...? 设 f[i][j][k][0/1] 表示当前处理完前 1 到 i 的数,上一位开始的顺子有 j 个,当前位开始的顺子有 k 个,是否已经有雀头,的情况下能不能胡 因为连续三个顺子其实等价于三个刻字,所以我们只要考虑顺子小于 3
阅读全文
摘要:传送门 一眼 Burnside dp 首先置换内部有独立的循环,置换的循环节长度为那些独立循环的 lcm 考虑某个循环节长度 L 怎么得到,显然把 L 质因数分解,∏mi=1pkii 那么最优情况下独立循环的循环节为 pkii,好像挺显
阅读全文
摘要:传送门 考虑 dp,设 f[i][j][k] 表示考虑了前 i 种面值的钱,Alice 现在有共 j 元,Bob 现在共有 k 元时,的最少交换次数 那么 Cynthia 的状态可以由总和减去 Alice 和 Bob 的状态得到 然后枚举每一种钱,枚举初末此种
阅读全文
摘要:传送门 看一眼感觉不太可做,推推性质 发现因为回文串去掉左右还是回文的,所以为了构成回文添加一个字符其实等价于删除另一边对应的字符 那么删除字符的代价就直接和添加字符的代价取最小值 然后考虑 dp,设 f[l][r] 表示当前 [l,r] 的区间内删除若干字符后成为回文串的最小代价,因为
阅读全文
摘要:传送门 一眼完全背包统计方案数,有啥好说的...
阅读全文
摘要:传送门 显然 dp,首先设 f[i][j] 表示当前考虑到第 i 个电线杆,高度为 j 时的最小代价 那么有转移 f[i][j]=f[i−1][k]+cost+C(j−k),其中 j>=k,cost 为把电线杆 i 增高到 j 的代价,i,j 固定时为常数 对
阅读全文
摘要:传送门 显然的 dp,设 f[i][j] 表示做完第 i 题,此月做的题的区间为 [j,i] 需要的最少月数 每个月记得分成还钱并写新题,和只还钱分类讨论,不要搞成每个月强制做一题 那么 f[i][i+1] 就表示把 i 题做完并还完钱需要的最少月数,注意一下边界什么的就好了
阅读全文
摘要:传送门 考虑 dp ,发现之前的 −1 可能会产生贡献不好处理 贪心一下发现每个位置填的数必须单调不减,所以就不用考虑之前填的数 设 f[i][j] 表示当前考虑到第 i 个位置,填的数为 j 时的最小代价 那么有 $f[i][j]=f[pre][k]+val[i][j],k<=
阅读全文
摘要:A. There Are Two Types Of Burgers 题意: 给一些面包,鸡肉,牛肉,你可以做成鸡肉汉堡或者牛肉汉堡并卖掉 一个鸡肉汉堡需要两个面包和一个鸡肉,牛肉汉堡需要两个面包和一个牛肉 求能得到的最多的钱 直接贪心,哪个比较贵就选哪个做,剩下的材料再做另一个 #include<i
阅读全文
摘要:传送门 发现保持自信和做其他事情互不干扰,可以直接做一次 dp 求出最多能空出几天来怼大佬 然后就变成给你若干天,是否能怼死大佬,考虑求出所有的 天数和输出的嘲讽值集合,因为天数不多,嘲讽值增长很快 所以直接 BFS + map 去重就行了 不怼大佬或者只怼一次的情况容易计算,现在问题是
阅读全文
摘要:传送门 显然考虑 dp ,发现从右往左和从左往右是一样的,所以只考虑一边就行 发现对于切的左右端点,选择的 s0 一定要为左右端点的贝壳大小,不然这个端点不产生贡献还不如分开来单个贡献 所以设 f[i] 表示当前把 1 到 i 的都切了,产生的最大贡献,设 c[i] 表示位置
阅读全文
摘要:传送门 注意到 a,b 不大 考虑对每一个 a∗2b 的 b 分别背包 设 f[i][j] 表示只考虑 b=i 的物品时,容量为 j=∑a 的最大价值 这个就是普通的 01 背包 考虑把 f[i][j] 之间合并起来,为了得到容量为 W 时的答案,我们
阅读全文
摘要:传送门 首先可以把时间区间离散化 然后求出 cnt[l][r] 表示完全在时间 [l,r] 之内的活动数量 设 f[i][j] 表示当前考虑到时间 i,第一个会场活动数量为 j 时,另一个会场的最大活动数量 这个转移直接枚举上一个时间分界线 k, $f[i][j]=max(f
阅读全文
摘要:传送门 设 f[i] 表示题目要求的 p 那么有 f[i]=max(f[j]+√|i−j|),考虑去掉绝对值 f[i]=max(a[j]+√i−j),j<=i,f[i]=max(a[j]+√j−i),i<j
阅读全文