目录
一、前言
感谢你能点开这篇文章,并与我们一起学习!
本篇文章继上篇动态规划(一),由01背包往完全背包深入了解。
二、完全背包
• 什么是完全背包?
完全背包,是一种经典的信息学问题,是研究一个固定容量的背包内能装多大价值的东西的问题。
跟01背包区别的是:完全背包可以重复的选择同一样物品
这时我们需要考虑的是:物品体积?物品价值?背包体积?对于选择几次不做考虑,遍历背包是会对一个物品多次选择;
(1)518. 零钱兑换 II
leetcode传送➡️https://leetcode.cn/problems/coin-change-ii/
给你一个整数数组
coins表示不同面额的硬币,另给一个整数amount表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回
0。假设每一种面额的硬币有无限个。
题目数据保证结果符合 32 位带符号整数。
示例 1:
输入:amount = 5, coins = [1, 2, 5] 输出:4 解释:有四种方式可以凑成总金额: 5=5 5=2+2+1 5=2+1+1+1 5=1+1+1+1+1
1. dp数组定义
本题与动态规划(一)中的“目标和”题目思路是一样的,但是这里的物品可以选择多次,所以属于完全背包问题。
题目出现总金额,我们不难想到将总金额作为dp背包的体积,又因为这道题要求我们求满足条件的方法个数,所以dp背包的含义为:装满背包的方法个数;
2. 递推公式
装满该背包体积的物品,由减去该物品体积的另一被装满的背包加上该物品体积所得;同时我们时刻注意dp的含义——方法个数,及推导出,递推公式为:
dp[j] += dp[j - coins[i]];<

本文深入探讨了完全背包问题,对比01背包,讲解了完全背包的特点及其在解决实际问题中的应用,包括零钱兑换等典型场景,并提供了详细的解题思路与代码实现。
最低0.47元/天 解锁文章
710

被折叠的 条评论
为什么被折叠?



