动规:由小问题的解构造大问题
注:
关键在于小问题的划分
注意边界条件的划分!
根据递推公式,明确dp数组的构造顺序
一维dp:数组维度与输入维度相关
一般是划分为两个问题,枚举第一个问题k(k<=i/2),然后与第二个i-k进行组合
无条件组合,一般输入是一个整数n,枚举1:k(dp+dp),取最小值
22. 括号生成f(i)=连加f(j)*f(i-j-1)
小问题的解通过判断+计算获得,然后组合第二个问题(计算结果+dp)需要判断(1+小问题)
递推公式对题目有很强依赖性的动规
01背包(dfs一般会超时)
dp实现细节
不需要排序,因为不会像dfs那样根据“前面的都没选而提前停止”
不必要记录每种硬币的数量,记录可以减少时间复杂度,但是代码会复杂。
只要比较dp[i-1][*]就ok了,不需要再往上查找,因为true会向下传
带限制的dp
事物操作性动规:用多个动规数组模拟不同操作
动规+dfs(记忆化dp:就是我理解的dp+dfs,用于计算顺序不好找的时候)
状态压缩dp
https://zhuanlan.zhihu.com/p/340063230j
状态不好表示/比较,利用位数特点等,将其转换为基础类型(如(i,j)表示为i*000+j),再进行求解。