动态规划
文章平均质量分 81
动态规划算法题
咕噜咕噜day
day day up!
展开
-
leedcode518:完全背包,零钱兑换,python逐行注解
题目:代码:class Solution: def change(self, amount: int, coins: List[int]) -> int: # 比如是只有两个硬币面值,并且两个硬币的数量是无限的,当无限取硬币时,转移方程:pro[n] += proi[n-coin[i]] 为什么是+=, 因为比如你使用面值为1时的组合方案在计算使用面值为2的方案时,应该是初始值; # 时间复杂度:O(amount*coins_n) .原创 2020-11-07 02:20:59 · 268 阅读 · 1 评论 -
leedcode70:爬楼梯(空间O(1),O(n))
class Solution: def climbStairs(self, n: int) -> int: # 子问题:sub(n) = sub(n-1) + sub(n-2) # 初始状态:dp[1] = 1, dp[2]=2 # 状态转移方程:dp[n] = dp(n-1) + dp(n-2) # # 法一用字典存储,空间复杂度是O(n),时间复杂度也是O(n) # dp = {} # dp.原创 2020-11-07 01:00:59 · 155 阅读 · 0 评论 -
剑指offer【62】:约瑟夫环问题,例子+递推
题目:思路+代码:举例:序号递推关系:思路:约瑟夫环,首先理解,最终留下的数字在每轮删掉一个数剩下数组中都存在,只是索引不同;然后知道只剩一个数时索引一定为0,比如 F(8,3) 可以由 F(7,3)推出;f(n,m) = (f(n-1, m) + m) % nclass Solution: # 思路: # 约瑟夫环,首先理解,最终留下的数字在每轮删掉一个数剩下数组中都存在,只是索引不同; # 然后知道只剩一个数时索引一定为0,比如 F(8,3) 可原创 2020-07-29 14:12:05 · 642 阅读 · 0 评论 -
剑指offer【60】:n个骰子得点数取值
题目:思路+代码:思路:动态规划,总可能出现情况6n初始状态:n=1, 1,2,3,4,5,6;六种情况转移方程:第n次掷色子后的s值,F(n,s) = F(n-1,s-1)+F(n-1,s-2)+F(n-1,s-3)+F(n-1,s-4)+F(n-1,s-5)+F(n-1,s-6);返回:第n次后,出现各值得情况次数 * 1/(6n)时间复杂度:O(n2)空间复杂度:O(n2); 初始化一个n*(6n)的0数组class Solution: def twoSum(self, n原创 2020-07-29 10:43:13 · 173 阅读 · 0 评论