动态规划中的打家劫舍与零钱兑换PPT
动态规划是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相互重叠的子问题来解决问题的方法。在动态规划中,打家劫舍和零钱兑换是两个经典的问题。打...
动态规划是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相互重叠的子问题来解决问题的方法。在动态规划中,打家劫舍和零钱兑换是两个经典的问题。打家劫舍打家劫舍问题通常可以描述为:你是一个小偷,要偷窃一系列房屋,每个房屋有一定的金额。你不能偷窃相邻的房屋,因为那样会增加你被抓住的风险。你的目标是找出一种方法,使得你能偷窃到的总金额最大。动态规划解法设 dp[i] 表示偷窃前 i 个房屋能得到的最大金额。对于第 i 个房屋,你可以选择偷或者不偷。如果你选择偷第 个房屋那么你不能偷第 个房屋,所以如果你选择不偷第 个房屋那么最终,dp[n] 就是你能偷窃到的最大金额。零钱兑换零钱兑换问题通常可以描述为:你有一定面额的硬币,你需要用这些硬币来兑换一定数量的钱。你的目标是找出一种方法,使得兑换的金额恰好等于目标金额,并且使用的硬币数量最少。动态规划解法设 dp[i] 表示兑换金额 i 所需的最少硬币数。对于每一个金额 i,你可以尝试使用所有面额的硬币进行兑换。如果你选择使用面额为 的硬币兑换那么你需要使用 个硬币兑换 ,再加上一个面额为 的硬币,总共需要 个硬币遍历所有可能的找到使得 最小的 ,那么 就是这个最小值最终,dp[amount] 就是兑换目标金额所需的最少硬币数。注意,在这个解法中,我们假设 dp[0] = 0,因为兑换金额为 0 时不需要任何硬币。另外,我们初始化 dp 数组为无穷大,这样我们就可以在遍历过程中找到最小的硬币数量。总结打家劫舍和零钱兑换是动态规划中的两个经典问题。通过动态规划,我们可以找到解决这两个问题的最优解。在实际应用中,我们可以根据问题的具体需求,调整动态规划的状态转移方程和初始条件,从而找到最合适的解法。