摘要: 二维四边形不等式优化常见与区间dp优化,对于形如f[i][j]=min(f[i][k] + f[k+1][j] + val(i,j)); 若val(i,j)满足四边形不等式,则f[i][j]同样满足四边形不等式。并由此可以得出结论:设p(i,j)表示f[i][j]的最优决策,P(i,j-1)<=p( 阅读全文
posted @ 2025-07-11 21:35 青一凡 阅读(0) 评论(0) 推荐(0)
摘要: 对于形如f[i] = min(f[j] + val(j,i)),若函数val()满足四边形不等式,则 f 具有决策单调性。每次计算出f[i],考虑i是(i+1,n)哪些位置的最佳决策。由四边形不等式可以证出:当f[k]+val(k,i)<=f[j]+val(j,i) 且k>j时,f[k]+val(k 阅读全文
posted @ 2025-07-11 21:23 青一凡 阅读(0) 评论(0) 推荐(0)
摘要: 斜率优化的转移方程以一段区间为转移起点取极值,设转移起点为j,转移目标为i,将由i决定的值看作常数,由j决定的值看作变量,可以化成线性方程y=ax+b的形式,并且转移终点f[i]也就是我们需要求的值需要表示“截距” ,同时需要表示x的变量单调递增。每一个j都对于直角坐标系中一个点,由于在转移时i是固 阅读全文
posted @ 2025-07-10 15:45 青一凡 阅读(0) 评论(0) 推荐(0)
摘要: 常规思路:f[i][j]表示前i个任务被分为了j个批次,转移时枚举f[x]j-1时间复杂度为O(n^3)。使用“费用提前计算”的思想,需要发现可以提出s,将其对总结果的答案加入f[i],状态表示上就不需要被分了j个批次这一层 int n, s; int t[5003], c[5003]; int d 阅读全文
posted @ 2025-07-08 17:40 青一凡 阅读(1) 评论(0) 推荐(0)
摘要: f[i][j]表示前i块木板考虑前j个工匠的最大收益,f[i][j]表示的所有方案可分为三种,1.工匠j不涂,可用f[i][j-1]表示 2.工匠j涂了,但不涂第i块木板,可用f[i-1][j]表示 3.工匠j涂了第i块木板,包括j所有可取的左端点 后效性处理:在转移时,工匠应该以s大小排序,如果s 阅读全文
posted @ 2025-07-07 18:22 青一凡 阅读(0) 评论(0) 推荐(0)
摘要: 用f[i][j]表示从s1i点开始组成2^j个s2最短要多长,由于要求"最短" 所以一定以s2的最后一个字符结尾。这样f[i][j] 与f[i+f[i][j]] 拥有可合并性,可以用倍增DP。先预处理f[i][0],状态转移方程为 f[i][j] = f[i][j-1] + f[i+f[i][j-1 阅读全文
posted @ 2025-07-05 17:05 青一凡 阅读(0) 评论(0) 推荐(0)
摘要: int n, m; int x0; int h[100005]; int ga[100005], gb[100005]; int f[20][100005][2]; int da[20][100005][2], db[20][100005][2]; void init_g() { set<pair< 阅读全文
posted @ 2025-07-05 15:16 青一凡 阅读(0) 评论(0) 推荐(0)
摘要: 已知当前树的直径的两个端点为u,v。添加一个节点x,则新的直径一定为(u,v),(u,x),(v,x)中的一条 阅读全文
posted @ 2025-06-07 22:53 青一凡 阅读(8) 评论(0) 推荐(0)
摘要: 求最长乘积为完全平方数的连续子序列。一个数位完全平方数等价于分解质因数后每一个质因数的数量位偶数。先将所有1e6以内的质数哈希,防止出现123==0的情况出现,使异或和为零必须是每个数出现的次数为偶数。 将ai分解质因数,求一个ai->bi的映射,bi定义为ai的哈希后的质因数的异或和。对bi求前缀 阅读全文
posted @ 2025-05-17 22:23 青一凡 阅读(22) 评论(0) 推荐(0)
摘要: 设原状态为st1,st2为st1的子集,可用以下方法遍历st1的子集 for(int st2=(st1-1)& st1 ; st2 ; st2 = (st2 - 1)&st1 ) 阅读全文
posted @ 2025-04-20 18:23 青一凡 阅读(6) 评论(0) 推荐(0)