摘要:
题意 "题目链接" Sol 很显然的一个dp方程 $f_i = min(f_j + (sum_i sum_j 1 L)^P)$ 其中$sum_i = \sum_{j = 1}^i len_j + 1$ 这个东西显然是有决策单调性的。 单调队列优化一下 我好像已经做过三个这种类型的题了,而且转移的时候 阅读全文
摘要:
题意 "题目链接" 给定一个长度为$n$的序列。你需要将它分为$m$段,每一段的代价为这一段内相同的数的对数,最小化代价总和。 $n define LL long long using namespace std; const int MAXN = 1e5 + 10; inline int read 阅读全文
摘要:
题意 "题目链接" Sol 结论:每次选择的区间一定满足首位元素相同。。 仔细想想其实挺显然的,如果不相同可以删掉多着的元素,对答案的贡献是相同的 那么设$f[i]$表示到第$i$个位置的最大价值,$s[i]$表示到$i$位置,$a[i]$的出现次数,转移方程为 $$f[i] = max(f_{j 阅读全文
摘要:
题意 "题目链接" $n$个节点的树,点有点权,找出互不相交的两条链,使得权值和最大 Sol ~~这辈子也不会写树形dp的~~ 也就是有几种情况,可以讨论一下。。 下文的“最大值”指的是“路径上权值和的最大值” 设$f[i][0]$表示以$i$为根的子树中选出两条不相交的链的最大值 $f[i][1] 阅读全文
摘要:
题意 "题目链接" Sol 比较套路的一个题。 第一问二分答案check一下 第二问设$f[i][j]$表示前$i$个数,切了$j$段的方案数,单调队列优化一下。 转移的时候只需要保证当前段的长度小于最大限度即可。 cpp include using namespace std; const int 阅读全文
摘要:
题意 "题目链接" Sol 挺显然的树形背包吧。。 $f[i][j]$表示$i$这棵子树中答案为$j$的最大价值,转移的时候背包一下。。 第一次写树形背包,犯了两个错误 1. 枚举根节点的贡献时需要倒着枚举 2. 转移时需要注意$k = 0$的情况,不要出现重复转移 阅读全文