力扣动态相似题目
1 对动态转移方程的变量进行了分离,减少了重复计算
123买卖股票的最佳时机III 和 1014. 最佳观光组合
2 贪心类的动态规划
3 典型的二维dp题
4 数学
高中排序组合 1359. 有效的快递序列数目
5 这道题无法直接用动态规划求解,要先排序才能,刚开始的思路是直接在原list上求最长数对链,思路是错的,这道题想到动态规划的关键是找到无后效性的最优子结构,这只有在排序后才能满足,
6 背包问题
1> 322. 零钱兑换
动态规划的本质是将暴力算法转化成了带记忆化的dp,即仍然是暴力,但大大减少了重复计算的次数,这个题需要计算所需的最少硬币数,dp[i]表示i需要的最少硬币数,显然dp[i]=min(dp[i-1], dp[i-2], dp[i-5])+1,由此看出需要对dp[i]做记忆化,为了使代码更简单,逐个对不同硬币遍历
这个题与322很像,如果按518定义成二维dp则是错误的,因为题目要求的是最低票价,它只于天数有关,也就是说如果确定天数,它的最低票价就是唯一的,所以用一维dp,正确的定义dp是关键,注意体会与518的区别,518之所以要加入用哪些硬币这个变量,是因为只用组成金额的话会出现重复,如amount为20,coins=[1,2,5],则dp[20]= dp[19]+dp[18]+dp[15],但是这里面有重复,所以是错误的
先考虑对于总金额amount,如何求所有的组合数,显然影响组合数的一个量是用哪些硬币,另一个是组成的金额是多少,由此想到定义dp的方法,dp[i][j]表示用前i种硬币组合成数目j的方法数,则dp[i][j]=dp[i-1][j] + dp[i][j-k],k为第i个硬币,由此可见这种题目的关键是先找到影响结果的所有变量,有几个变量就是几维的dp,再定义dp方程,最后写出状态转移方程,