【算法】动态规划(二)——从根本解决完全背包与01背包

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

目录

一、前言

二、完全背包

• 什么是完全背包?

(1)518. 零钱兑换 II

• 整体代码

 (2)322. 零钱兑换

• 整体代码

(3)377. 组合总和 Ⅳ

•整体代码

01背包与完全背包及解题总结💐💐💐


一、前言

感谢你能点开这篇文章,并与我们一起学习!

本篇文章继上篇动态规划(一),由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]];<
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dusong_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值