本文持续更新
特性
能将大问题拆成几个小问题,且满足无后效性、最优子结构性质。
例如:面值为1,5,10,使用最少数量钞票凑出面值15。
求解步骤
判断动规依据
资料
=oBt53YbR9Kk
/
/
/@al.eks/the-ultimate-guide-to-dynamic-programming-65865ef7ec5b
/
.Dynamic-Programming/01.Dynamic-Programming-Basic/01.Dynamic-Programming-Basic/
求解步骤
题解
var fib = function(n) {// 1状态 dp[n]表示n的的斐波那契数const dp = new Array(n);// 2初始化dp[0] = 0, dp[1] = 1;// 3状态转移方程 dp[n] = dp[n - 1] + dp[n - 2]// 4执行for (let i = 2; i <= n; i++) {// 答案要求取模 (x+y)⊙p=(x⊙p+y⊙p)⊙p ⊙取模dp[i] = (dp[i - 1] + dp[i - 2]) % 1000000007;}// 状态压缩:求解n只需要n - 1 和 n - 1的斐波那契数,所以可以优化dp数组,维持长度为3数组,不断更新前面两个值/*for (let i = 2; i <= n; i++) {dp[2] = (dp[1] + dp[0]) % 1000000007;dp[0] = dp[1];dp[1] = dp[2];}*/// 5返回结果return dp[n];
};
复杂度
求解步骤
可以转换成 LCR 126. 斐波那契数
var trainWays = function(num) {if (num < 2) {return 1;}const dp = new Array(3);// 初始值和斐波那契数不一样dp[0] = 1不是0dp[0] = 1; dp[1] = 1;for (let i = 2; i <= num; i++) {dp[2] = (dp[0] + dp[1]) % 1000000007;dp[0] = dp[1];dp[1] = dp[2];console.log('i', i, 'dp', dp)}return dp[2];
};
复杂度
解题步骤
题解
var minCostClimbingStairs = function(cost) {const len = cost.length + 1;const dp = new Array(len).fill(0);for (let i = 2; i < dp.length; i++) {dp[i] = Math.min((dp[i - 1] + cost[i - 1]), (dp[i - 2] + cost[i - 2]));}return dp[len - 1];
};
复杂度
优化
使用滚动数组的思想,将空间复杂度优化到 O(1)
var minCostClimbingStairs = function(cost) {// 和求解斐波那契数一样最终结果只和前面两个数有关,可以只保存前两个数的值let pre = 0, curr = 0;const len = cost.length + 1;for (let i = 2; i < len; i++) {const next = Math.min((curr + cost[i - 1]), (pre + cost[i - 2]));pre = curr;curr = next;}return curr;
};
求解步骤
题解
复杂度
求解步骤
题解
var uniquePaths = function(m, n) {const dp = new Array(m).fill(new Array(n));for (let i = 0; i < m; i++) {dp[i][0] = 1;}for (let i = 0; i < n; i++) {dp[0][n] = 1;}console.log(dp)for (let i = 1; i < m; i++) {for (let j = 1; j < n; j++) {dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}return dp[m - 1][n - 1];
};uniquePaths(3, 7) // 28
复杂度
1、线性 DP
198 213 91 1646 1043 139 1869 724
最经典单串:
其他单串
最经典双串:
其他双串
经典问题:
打家劫舍系列: (打家劫舍3 是树形DP)
股票系列:
字符串匹配系列
其他
2、区间 DP
3、背包 DP
4、树形 DP
5、状态压缩 DP
464.我能赢吗
526.优美的排列
935.骑士拨号器
1349.参加考试的最大学生数
6、数位 DP
7、计数型 DP
计数型DP都可以以组合数学的方法写出组合数,然后dp求组合数
8、递推型 DP
9、概率型 DP
求概率,求数学期望
10、博弈型 DP
策梅洛定理,SG 定理,minimax
翻转游戏
Nim游戏
石子游戏
井字游戏
11、记忆化搜索
本质是 dfs
+ 记忆化,用在状态的转移方向不确定的情况
本文发布于:2024-01-29 12:38:19,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170650309915339.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |