动态规划之背包问题

本文详细介绍了动态规划中的四种背包问题:01背包、完全背包、多重背包,以及它们的解题思路。通过实例分析和代码实现,帮助读者理解不同背包问题之间的转化和解决策略。
摘要由CSDN通过智能技术生成

0-1背包问题(含代码)

0-1背包问题入门详解

动态规划常见面试题总结

【动态规划】01背包问题(通俗易懂,超基础讲解)

动态规划之完全背包详解

Table of Contents

题型一(01背包)

题型二(01背包)

题型三(完全背包)

题型四(多重背包)


背包问题是典型的动态规划问题,不同类型的背包问题有不同的解题思路

01背包:N件物品,每件物品有一个

完全背包:N种物品,不限量

多重背包:N种物品,每种物品数量有限

要学会不同背包问题解题思路之间的转化。。。

题型一(01背包)

n个物品,重量为w,装入容量为C的容器,要求取若干个物品,使得装入重量最大(容器内剩余容量最小)

分析:属于背包型动态规划,相当于背包容量和背包中物品价值二者相等的一般背包问题(貌似也称为伪背包问题)。通过转化思想即求:在总体积为V的情况下,可以得到的最大价值(此时价值用物品的重量代替),最后再用总体积减去最大价值时所占空间就是剩下的最少空间。

def package1(V, n, w):
    dp = [[0]*(V+1) for i in range(n+1)]
    for i in range(1, n+1):
        for j in range(1, V+1):
            if j < w[i-1]:
                dp[i][j] = dp[i-1][j]
            else:
                dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i-1]]+w[i-1])
    return V-dp[n][V]

 
if __name__ == '__main__':
    """coins, n = [1, 5, 10, 25], 10  # 输入可换的硬币种类,总金额n
    coinChange2(coins, n)"""
    V,n,w=24,6,[8,3,2,7,9,7]
    d = package1(V,n,w)
    print d
dp数组
[
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值