关于动态规格的新理解
今天又一次听了动态规划,有些许感悟,所以想和大家分享一下
动态规划是什么?
是一种思想,
把问题逐渐变小,使我们通过一个式子就可以推出结果(在递推的基础上)
要点:1.方程式
2边界条件
3.状态之间的联系
分类 1.线性动规
2.背包动规
3.区间动规
4.树形动规
5DAG动规
下面我们分类来讲
1.线性动规
dp[i]表示前i个物品的最优方案
dp[i][0/1]表示前i个物品,其中第i个物品是否被选中,此时的最优方案
dp[i][k]表示前i个物品,选出k个的最优方案
例题:LIS,除了剩下的四种的所有
2.背包动规
dp[i][v]表示前i个物品消耗体积v的最大收益
例题:01,完全,多重,二维,分组
3.区间动规
dp[l][r]表示区间[l,r]的最优答案
l==r有时是边界
dp[l][k]+dp[k+1][r];
4.树形动规
在树上进行动态规划
一般以父子关系为约束
比如:父亲和儿子不能被同时选中
dp[v]表示以v为根节点的子树能获得的最大收益
dp[v][s]表示以v为根节点的子树,s表示节点v是否被选中,此种情况下的最大收益
(有根树和无根树不是一种题)
例题:没有上司的舞会
dp[u][0]=sigma(max(dp[v][0],dp[v][1]))
dp[u][1]=sigma(dp[v][0])+A[u];
5.DAG动规 (有向无环图)
把树形动规扩展到DAG上,就是DAG动规
dp[u]表示以节点U为结尾的路径的答案
例题:DAG最长链
dp[v]表示以节点v为结尾的最长路径
dp[v]=max(dp[u]+w[u][v]|u->v)
先做拓扑排序,按照拓扑排序的顺序进行动态规划
我博客里有大量的从别的博客复制过来的代码,分析,以及理解,但我一律会在文章后面标记原博客大佬博客名,其中部分会加以连接。
绝无抄袭的意思,只是为了我在复习的时候找博客方便。
如有原作者对此有不满,请在博客留言,我一定会删除该博文。