前言:本博客主要是为了准备考研数据结构自命题而写的,主要为个人复习使用。里面的题博主在大一大二基本都刷了若干遍,所以这里只写一些简单的思路和总结评语,供日后回顾复习使用。
——————————————————
DP
1.acwing1010 导弹拦截 题目大意:利用若干组互相独立的单调序列去覆盖原序列(贪心解决)

2.AcWing 187. 导弹防御系统(爆搜+贪心)

3.AcWing 272. 最长公共上升子序列 思路:dp(i,j)表示a数组从前i个数里面选,b数组从前j个数组里面选,且以bj结尾的最长公共上升子序列的长度,然后根据题意进行状态状态转移。 PS:直接进行状态转移会发现这题会超时,可以先把超时的代码写下来,然后再做等价变形。背包转移的化简与此相同,这种等价变形类的DP可以说很经典了

4,AcWing 1022. 宠物小精灵之收服 (多维费用的背包问题,不建议套用背包模板,建议直接推状态转移方程,虽然直接套背包模板会省很多时间,但是不容易理解中间过程,以及我们方程的实际意义)

5.AcWing 532. 货币系统(动态规划求解极大线性无关组,这题挺有意思,之前一直准备acm把线代课逃了一学期,现在准备考研才发现这题原来是线性代数,感觉这题可以当成板子记了,hh)

6.AcWing 6. 多重背包问题 III 单调队列优化多重背包 em…这个比赛没遇见过,考研我感觉也不至于考,继续收到板子库里,跳过。

8.AcWing 1020. 潜水员 二维费用背包,只能选多不可以选少的下的问题处理。(状态转移:定义dp[k][i][j]表示从前i个物品中选,且物品一的体积不少于i,物品二的体积不少于j的***状态,因为可能我当前定义的状态是不少于某个体积,所以选了当前物品,上一个状态体积为负也是可能的,此时为负的状态其实跟为零的状态一样,故把这种状态全部转移到dp[0][0]上)

9.AcWing 1013. 机器分配 线性DP+输出方案(DP输出方案这个题型最近几年考研自命题考的很多,要额外注意)

10.AcWing 10. 有依赖的背包问题 树形背包板子,经典树形DP问题,状态表示:dp[i][j]表示从以i为根的子树中选体积为j的物品的最大价值。

11.AcWing 11. 背包问题求方案数 板子题,状态转移最大价值时同时转移相应的方案数即可。

12.AcWing 12. 背包问题求具体方案 跟机器分配那题一样,注意,求背包具体方案这种问题,不能单纯套用之前的板子,因为之前的板子只是求最大值,我们求得状态是有重复的,这里的状态转移必须自己重新推一遍,要做到不重不漏。

13.AcWing 1057. 股票买卖 IV 经典状态机分析DP问题,状态机跟集合分析都是解决DP的一种方法,二者各有所长,集合分析可以将集合不断细化然后分析问题,状态机则适合状态数量不多,但是相互之间关系转换较多的问题。

14.AcWing 479. 加分二叉树 这也算一个经典区间DP记录方案的问题了吧,21年A组国赛也考了一个填空不过没让输出方案。注意这题一个点存在只有左子树,或者只有右子树,或者都没有的情况(即存在空子树),区间DP枚举分界点k时,k的范围必须是l~r,同时注意本题的初始化。

15.AcWing 1072. 树的最长路径 经典板子,树形DP的思想是过一个点的最长路径等于这个点下的最长链加次长链的长度,定义dp(u)返回以u为根的最长链长度然后做记忆化搜索即可。

16.AcWing 1073. 树的中心 经典板子,本题本质上是求每个点最长链中最短的链。一个点的最长链可以是由子节点转移(同树的最长路径的转移方法)过来,也可以由父节点转移,从父节点转移时有两种可能,一种时从父节点的父节点转移,一种是从父节点的最长链(如果当前点不在最长链上)或次长链上(当前点在最长链上)转移。

17.AcWing 1074. 二叉苹果树 经典树形DP,也可以看做是有依赖的背包问题,注意本题相当于有依赖的01背包,所以dfs状态转移时体积要从大到小枚举。