摘要: 线性DP虽然是被称为DP的入门,其实它是DP的万恶之源,一切其它DP不过是在它上面加入优化 接下来给几个例题,可以让你深刻感受到DP状态设计的恶心 T1.[LuoguP4310]绝世好题 这题很多人第一眼看到会想到设计一个 $f[i]$代表以$i$为结尾的序列最大长度是多少,转移方程 显而易见是$f 阅读全文
posted @ 2022-07-08 18:53 羊扬羊 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 一道典型的树型dp 首先每门课肯定只能选择一次,那么毫无疑问是一道树上的01背包,容量可以看作科目的门数 设计状态:$f[i][j]代表了以i为根节点的子树中选择j门课程获得的最大得分$ 转移:对于节点$x$,进行01背包的转移(记得倒序!记得倒序!记得倒序!) 小细节:对于每个节点的转移,若它不是 阅读全文
posted @ 2022-06-28 16:55 羊扬羊 阅读(66) 评论(0) 推荐(0) 编辑
摘要: 一道很简单的区间dp,竟然是道蓝 赶快去水积分吧 读题后不难发现,不同行的取数决策并不影响其它行的答案,因此我们dp时只要搞出每行的最大值,加起来就是答案了 对于每一行,我们只可以取行头或者行末,取完后剩下的数必定还是一段连续区间,且很容易通过大区间的答案推出小区间答案,是区间dp没错了 不妨设$d 阅读全文
posted @ 2022-06-27 16:35 羊扬羊 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 可持久化线段树 可持久化线段树可以用于修改、维护序列任何一个历史副本 ###可持久化线段树1(可持久化数组) 只是个关于可持久化数据结构的引子,使用线段树来实现可持久化数组 我们熟知的线段树是长这样的(蓝色指的是修改节点的路径) 现在,我们既要修改也需要保存历史副本。如果我们强行再开一个数组,肯定会 阅读全文
posted @ 2022-06-12 19:45 羊扬羊 阅读(73) 评论(0) 推荐(0) 编辑
摘要: T1 报数 很智障的题,筛一遍就行了 唯一要注意的就是要筛到 $10^7+1 $,因为对于9999998,输出应该是 \(10^7+1\) 代码想必是没必要贴了 ##T2 数列 题面有点小绕,大概是拼一个二进制数出来,满足1的个数小于k,还要求个权值和 考虑用计数dp 题目中提到 \(S=2^{a_ 阅读全文
posted @ 2022-06-10 21:18 羊扬羊 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 一.树的直径 定义:树上最长的简单路径 求法:两次dfs,首先在树上找到离任意一点最远的一点A,再找到离A点最远的点B,可以证明A、B为直径的两条端点 代码 点击查看代码 #include<bits/stdc++.h> #define pb push_back using namespace std 阅读全文
posted @ 2022-01-24 23:48 羊扬羊 阅读(21) 评论(0) 推荐(0) 编辑