首页 > 编程语言 >代码随想训练营第四十四天(Python)| 完全背包、518. 零钱兑换 II 、377. 组合总和 Ⅳ

代码随想训练营第四十四天(Python)| 完全背包、518. 零钱兑换 II 、377. 组合总和 Ⅳ

时间:2023-11-30 15:33:26浏览次数:57  
标签:背包 weight Python 第四十四 value II bag 遍历 dp

[完全背包]
有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。
1、先遍历物品再遍历背包

def all_bag(weight, value, bag_weight):
    dp = [0] * (bag_weight + 1)

    for i in range(len(weight)): # 先遍历物品
        for j in range(weight[i], bag_weight + 1): # 再遍历背包
            dp[j] = max(dp[j], dp[j - weight[i]] + value[i])
            print(f'物品重量为: {weight[i]}, 背包可背的重量为: {j}, 背包dp[{j}]最大价值为: {dp[j]}')
    print(dp)
    return dp[bag_weight]

if __name__ == "__main__":
    weight = [1, 3, 4]
    value = [15, 20, 30]
    bag_weight = 4
    res = all_bag(weight, value, bag_weight)
    print(res)

2、先遍历背包后遍历物品

def all_bag(weight, value, bag_weight):
    dp = [0] * (bag_weight + 1)

    for i in range(bag_weight + 1): # 先遍历背包
        for j in range(len(weight)): # 再遍历物品
            if i >= weight[j]:
                dp[i] = max(dp[i], dp[i - weight[j]] + value[j])
            print(f'背包可背的重量为: {i}, 物品重量为: {weight[j]}, 背包dp[{i}]最大价值为: {dp[i]}')
    print(dp)
    return dp[bag_weight]

if __name__ == "__main__":
    weight = [1, 3, 4]
    value = [15, 20, 30]
    bag_weight = 4
    res = all_bag(weight, value, bag_weight)
    print(res)

总结: 先背包后物品排列,先物品后背包组合
518. 零钱兑换 II 

class Solution:
    def change(self, amount: int, coins: List[int]) -> int:
        # dp 数组代表金额为 j 的组合总数为 dp[j]
        dp = [0] * (amount + 1)
        # 初始化数组为 1
        dp[0] = 1

        # 先遍历物品再遍历背包是组合
        for coin in coins:
            for i in range(coin, amount + 1):
                dp[i] += dp[i - coin]
        return dp[amount]

377. 组合总和 Ⅳ

class Solution:
    def combinationSum4(self, nums: List[int], target: int) -> int:
        # dp 数组代表 target 为 j 时的组合个数为 dp[j]
        dp = [0] * (target + 1)
        dp[0] = 1

        # 求排列先遍历背包后遍历物品
        for i in range(target + 1):
            for num in nums:
                if i >= num:
                    dp[i] += dp[i-num]
        return dp[target]

标签:背包,weight,Python,第四十四,value,II,bag,遍历,dp
From: https://www.cnblogs.com/yixff/p/17852491.html

相关文章

  • python flask下载功能
    前言flask下载功能一、约定要下载文件绝对路径:/tmp/flask_web/download/test.tar.gzpy主程序:/tmp/flask_web/main.py二、main.py内容@app.route("/down/<path:filename>",methods=['GET','POST'])defdownload_file(filename):try:#......
  • Rust std fs 比 Python 慢!真的吗!?
    作者:XuanwoDatabendLabs成员,数据库研发工程师https://github.com/xuanwo我即将分享一个冗长的故事,从OpenDAL的op.read()开始,以一个意想不到的转折结束。这个过程对我来说非常有启发性,我希望你也能感受到。我会尽力重现这个经历,并附上我一路学到的教训。让我们开始吧!......
  • python图像中如何 绘制矩形,编辑文案,保存结果图片等操作
    python版opencv函数学习笔记-cv.rectangle()全参数理解cv2.rectangle(img,pt1,pt2,color,thickness=None,lineType=None,shift=None)以下来自官方文档和自己的理解img:指定一张图片,在这张图片的基础上进行绘制;pt1:矩形的一个顶点;pt2:与pt1在对角线上相对的矩形的顶点;......
  • 【5.0】Python面向对象之组合
    【一】什么是组合在一个类中以另外一个类的对象作为数据属性,称为类的组合。【二】组合的使用组合与继承都是用来解决代码的重用性问题。不同的是:继承是一种“是”的关系,比如老师是人、学生是人,当类之间有很多相同的之处,应该使用继承;而组合则是一种“有”的关系,比如老......
  • 【8.0】Python面向对象之反射
    【一】反射【1】什么是反射反射是一种程序可以访问、检测和修改其本身状态或行为的能力。在Python中,反射主要指通过字符串的形式操作对象的属性。【2】Python中的反射通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)【二】反射方法......
  • 【7.0】Python面向对象之绑定方法与非绑定方法
    【一】绑定方法与非绑定方法介绍【1】绑定方法绑定给谁,谁来调用就自动将它本身当作第一个参数传入(1)绑定到类的方法用classmethod装饰器装饰的方法。为类量身定制类.boud_method(),自动将类当作第一个参数传入(其实对象也可调用,但仍将类当作第一个参数传入)(2)绑定......
  • 【补】Python中关于OOP的常用术语
    【一】抽象与实现【1】抽象抽象是一种概念或思维工具,用于简化复杂的问题并将其分解为易于管理的部分。抽象可以帮助我们理解事物的本质和行为,同时也可以帮助我们在设计软件时更好地组织代码和数据结构。【2】实现实现则是对抽象的一种具体表达。它是对抽象的概念或模型进......
  • [python] 基于Tablib库处理表格数据
    Tablib是一个用于处理电子表格(如Excel,CSV,JSON)的Python库。它提供了一种简单而强大的方式来操作和处理数据。利用Tablib,我们可以轻松地读取、写入、过滤和转换各种类型的电子表格数据。Tablib具有一致且易于使用的API,以在不同的数据格式之间进行无缝转换。比如,Tablib可以将数据......
  • Python爬取某电商平台商品数据及评论!
    前言随着互联网的发展,电商平台的出现让我们的消费更加便利,消费者可以在家里轻松地购买到各种商品。但有时候我们需要大量的商品数据进行分析,或者需要了解其他消费者的评价,这时候我们可以通过爬虫来获取数据。本文将介绍如何使用Python爬取某电商平台的商品数据及评论,并且用到代理ip......
  • Python学习之十二_tkinter的学习与使用
    Python学习之十二_tkinter的学习与使用摘要本来想说会用QT5进行界面编程但是发现比较繁琐还是先学习使用tkinter的方式进行界面化的编写和学习了基础知识tkinter是一个源码开放的图形用户接口开发工具,具备跨平台的特性Python默认的GUI开发模块是tkinter(在Python3以前的版本中......