随笔分类 - 6.03.0 区间DP
摘要:区间DP 手动模拟一下,我们发现本题就是一个左右加数的区间DP cpp include include include include include include using namespace std; const int MAXN = 1005, MOD = 19650827; int nu
阅读全文
摘要:区间DP 拆链成环,然后区间DP即可,注意初始化,以及每个地方都要遍历到 cpp include include include include include define inf 0x3f3f using namespace std; int num[205], dp[205][205][2],
阅读全文
摘要:博弈论+dp 依旧是博弈论的壳子,但问的是最大值,所以要dp 设 dp[i][j] 表示该取 i 号硬币,上一次取了 j 个的先手能取的最大值, 因为每次从小到大枚举复杂度太高,所以我们要从 dp[i][i 1] 转移,每次新加两个状态即可 cpp include include include i
阅读全文
摘要:博弈论+区间dp 有博弈论吗?大约只有一个博弈论的壳子 设 dp[i][j] 表示区间 i ~ j 先手最多能取多少, 它可以由 i ~ j 1 与 i + 1 ~ j 来转移, 等于上述两个区间中后手的最大值 + 选的数 cpp include include include include us
阅读全文
摘要:本题虽然是在树上的问题,但仍是区间DP的基本思路,因为给定区间是树的中序遍历,所以我们枚举左右端点,dp[i][j]表示从i到j号区间所表示的子树的最大分数,在转移的时候枚举根节点k, 有转移方程 题目还要求输出先序遍历,只需在转移的时候更新root数组,rt[i][j]表示从i到j的区间所表示的子
阅读全文
摘要:本题是一道区间DP,很容易设计出状态, dp[i][j]代表关掉i到j的路灯所耗的电量,但是对于新到一个路灯来说,可以是原来直接来的,也可以是掉头来的,于是还需要添加一维 0代表在区间的左端,1代表在区间的右端。从最开始所在的地方扩展。 因为涉及连续区间,可以采用前缀和优化。 有如下转移方程: dp
阅读全文