算法随想录第四十四天打卡|完全背包, 518. 零钱兑换 II , 377. 组合总和 Ⅳ

详细布置
 

力扣上没有纯粹的完全背包的题目,所以大家看本篇了解一下 完全背包的理论 

后面的两道题目,都是完全背包的应用,做做感受一下

完全背包

def test_CompletePack():
    weight = [1, 3, 4]
    value = [15, 20, 30]
    bagWeight = 4
    dp = [0] * (bagWeight + 1)
    for i in range(len(weight)):  # 遍历物品
        for j in range(weight[i], bagWeight + 1):  # 遍历背包容量
            dp[j] = max(dp[j], dp[j - weight[i]] + value[i])
    print(dp[bagWeight])

test_CompletePack()

总结

感觉01背包和完全背包在代码上的区别只有遍历背包时用正序遍历,且完全背包可以先遍历背包再遍历物品。之所以可以这么做,因为它可以通过横向推出来,也可以通过纵向推出来。

 518. 零钱兑换 II  

视频讲解:动态规划之完全背包,装满背包有多少种方法?组合与排列有讲究!| LeetCode:518.零钱兑换II_哔哩哔哩_bilibili

代码随想录

class Solution(object):
    def change(self, amount, coins):
        dp=[0]*(amount+1)
        dp[0]=1
        for coin in coins:
            for j in range(coin,amount+1):
                dp[j]+=dp[j-coin]
        return dp[amount] 

总结

秒了。不过虽然是秒了,但感觉靠了点运气试出来的,之前我用的是max()函数来求的。求装满背包有几种方法,递推公式一般都是dp[i] += dp[i - nums[j]]。

 377. 组合总和 Ⅳ  

视频讲解:动态规划之完全背包,装满背包有几种方法?求排列数?| LeetCode:377.组合总和IV_哔哩哔哩_bilibili

代码随想录

思路

开始我想这不和上题是一样的吗?但是看了看还是有区别,他加了个排列的问题,搞得我不会了。我想应该要改遍历或是方程式,但也不知道怎么改。

class Solution(object):
    def combinationSum4(self, nums, target):
        dp=[0]*(target+1)
        dp[0]=1
        for j in range(1,target+1):
            for num in nums:
                if j>=num:
                    dp[j]+=dp[j-num]
        return dp[target]

总结

这道题遍历顺序和方程式都要改,把背包放上面可以让3出现在1的前面,而背包放下面的话只有先出现1后才会出现3。后面又把从num出发改成1为起点遍历,让每一个背包都可以添加所有的物品,从而实现排列。而j>=num可以不报错和节省时间。

最近更新

  1. TCP协议是安全的吗?

    2024-01-31 01:50:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-31 01:50:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-31 01:50:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-31 01:50:02       20 阅读

热门阅读

  1. 软件价值2-贪吃蛇游戏

    2024-01-31 01:50:02       41 阅读
  2. day35_js

    2024-01-31 01:50:02       37 阅读
  3. 深入到 TLP:PCI Express 设备如何通信(第二部分)

    2024-01-31 01:50:02       35 阅读
  4. ETCD节点故障的容错方案

    2024-01-31 01:50:02       38 阅读
  5. C++ 手记

    2024-01-31 01:50:02       29 阅读
  6. 【vue】前后端不在同一网络下,前端解决跨域

    2024-01-31 01:50:02       34 阅读
  7. python3-cookbook-查找两字典的相同点

    2024-01-31 01:50:02       40 阅读
  8. 738. 单调递增的数字 - 力扣(LeetCode)

    2024-01-31 01:50:02       29 阅读
  9. 达梦 hibernate连接主备集群

    2024-01-31 01:50:02       37 阅读
  10. 蓝桥杯练习-dfs算法飞机降落问题

    2024-01-31 01:50:02       35 阅读