关于动态规格的新理解

今天又一次听了动态规划,有些许感悟,所以想和大家分享一下

动态规划是什么?

是一种思想,

把问题逐渐变小,使我们通过一个式子就可以推出结果(在递推的基础上)

要点: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)

先做拓扑排序,按照拓扑排序的顺序进行动态规划

原文地址:https://www.cnblogs.com/ZDHYXZ/p/8428076.html