合集-动态规划
摘要:SP15637 GNYR04H - Mr Youngs Picture Permutations 解析
[题目链接](https://www.luogu.com.cn/problem/SP15637)
## 分析题目性质
大意就是给 $k$ 排然后每个数列单调,每个横列单调,求满足这样排列的方案数。
我们发现:与其为每个位置分配某个学生不如考虑**将每个学生分给某个位置**。
## 思路
根据以上,不妨设:$f_{a_1,a_2,a_3,a_4,a_5}$ 分别代表第 $i$ 排现在人数为 $a_i$ 的方案数。
那么应该满足以下条件:
- $a_i < N_i$
- $i=1$ 或者 $a_{i-1}
阅读全文
摘要:# P10954 LCIS 题目解析
[题目链接](https://www.luogu.com.cn/problem/P10954)
## 思路
前置:[弱化版](https://www.luogu.com.cn/problem/CF10D)
没什么好说的,设 $f_{i,j}$ 表示 $a$ 的前 $i$ 个并且结尾为 $b_j$ 的最长上升公共子序列。
定义 $a_0=b_0=-\infty.$
转移:
- $a_i=b_j,f_{i,j}=\max_{k\in [0,j-1]\text{ 且 }b_k < a_i} f_{i-1,k}.$
- 否则,$f_{i,j}=f_{i-1,j}.$
我们发现直接过掉了,但这样的时间复杂度是 $\mathcal{O}(n^3)$ 的。
考虑免去一些重复的取 $\max$ 值。
阅读全文
摘要:# P1779 魔鬼杀手 题解&&思路
[题目链接](https://www.luogu.com.cn/problem/P1779)。
## 分析题目性质
我们发现假如有状态表示 $M$ 个方案选或不选,那么这个状态有唯一确定的结果,即**结果不会随着施法的顺序而改变。**
考虑 $dp.$
我们从题目出发,发现每个方案有单个攻击或者集体攻击,想一想从这个方面考虑。
又由于每一个方案是可以选择无限次的,不难想到 `完全背包`。
阅读全文
摘要:P2893 [USACO08FEB] Making the Grade G 题目分析
[题目链接](https://www.luogu.com.cn/problem/P2893)
## 分析题目性质
不难解析出题目中的序列 $B$ 有“单调不下降”和“单调不上升”两种情况,不难想到分两种情况讨论答案即可。
有一个性质:
> 在满足答案最小化的情况,一定存在一种方案使得 $B$ 中的数字一定在 $A$ 中。
不难证明其方案是不劣于不在 $A$ 中的数的。
而根据性质,$j$ 可以用离散化解决,也可以设为 $A_j$。
因此,总时间复杂度 $\mathcal{O}(n^2)$ 的。
**注意,因为要求单调,所以一定要对离散过的 $A$ 进行排序,否则就有可能不单调。**
不难完成对 $cost(j+1,i-1)$ 的计算,即只需要计算什么时候前面与 $A_j$ 相同,后面与 $A_i$ 相同,使答案最小。
扫一遍即可,总时间复杂度 $\mathcal{O}(n^3)$,无法通过本题。
阅读全文
摘要:观察题目,可以发现的是一个凸多边形一定满足:
- 每一行的左端点列号先递减后递增。
- 每一行的右端点列号先递增后递减。
根据上述,我们需要关注以下的信息:
- 当前的左端点。
- 当前的右端点。
- 这一行以左端点开始连续选多少个。
- 当前左端点列号需要满足的单调性。
- 当前右端点列号需要满足的单调性。
显然的,右端点、左端点和选的格子数知道两个就可确定第三个的值。
因此我们设:$f_{i,j,l,r,0/1,0/1}$ 表示前 $i$ 行已经处理完毕加上第 $i$ 行有 $j$ 个格子,第 $i$ 行选择第 $l$ 到 $r$ 的格子,且左端点、右端点列号满足现在该有的单调性的最大价值(其中 $0$ 表示递减,$1$ 表示递增)。
阅读全文
摘要:[四倍经验](https://www.luogu.com.cn/paste/6zox5x4a)
目前这道题是最基础的,四倍经验里面的 $T_2$ 与此一样,$T_3$ 有点卡空间,但是还好,方案用 `short` 或者 `char` 即可优化,$T_4$ 一样,有些卡常,问题不大。
## 分析题目性质
没有什么十分有用的性质。
## 思路
注意到:分配干活的只有 $3$ 个人。
看到这么小的数很容易想到三维或者四维 $dp$ 或者是 状态压缩 $dp$,很显然是前者。
设 $f_{i,a_1,a_2,a_3}$ 表示第 $i$ 个请求后,三个人的位置分别为 $a_1,a_2,a_3$ 的最小成本。
转移是简单的,不过多赘述。
阅读全文
摘要:# 整数划分 题目分析以及衍生出来的一系列做法
推荐看[背包计数问题的多项式优化](https://www.cnblogs.com/maple276/p/18342090)。
## 题目概述
将 $n$ 分为若干个**不同**整数的和,问有多少种方案。
## 分析题目性质
想一想,注意到是不同整数的和,也就是说我们分成的 $k$ 部满足:
$$
k(k+1)\leq 2n
$$
约等一下,$k\leq \sqrt{2n}+1$,即 $k_{\max}=\sqrt{2n}+1.$
因此可以考虑 $\mathcal{O}(nk)$ 算法。
阅读全文
摘要:# CF140E New Year Garland 题目分析
挺不错的动态规划题目。
## 思路
一看到题目便可以知道每一层和层与层之间是要分开来算的(这种类似的动态规划还有很多)。
我们先看看层与层之间的。
### 层与层
题目要求:**相邻的两层的小球颜色集合不相同**。
那么区分相邻两层小球颜色集合不同可以通过**数量不同来区分**,然后再进行讨论即可。
根据上述,显然地,设 $f_{i,j}$ 表示已经完成前 $i$ 层,到了第 $i$ 层小球颜色集合的数量为 $j$ 的总方案。
我们先抛开重不重复不谈,那么它的总方案肯定是从前面的那一层转移过来,即 $f_{i-1,k}$,其中 $k\in [1,l_{i-1}]$。
那么是不是就是
$$
f_{i,j}=\sum_{k=1}^{l_{i-1}}f_{i-1,k}
$$
呢?显然不是,这里的 $j$ 是数量,并不是选了什么,因此还要有 $C_m^j$ 来确定选 $j$ 种颜色球的方案(这是对于当前 $i$ 的)。
阅读全文