动态规划:背包问题

news2024/9/22 15:50:40

01背包:物品只能选一个

完全背包:物品可以选无数个  

注:01背包与完全背包,不论是求背包装的最多物品的价值,还是求装满容量为bag的背包最多有几种方法,区别都在里层遍历背包时,01背包使用倒序遍历,完全背包使用正序遍历

一、01背包问题

 1. 给定背包大小bag,求背包装的最多物品的价值

代码随想录 动态规划12题:01背包理论基础(滚动数组)

def test_1wei_bag_problem():
    weight = [1, 3, 4]          #物品所占体积
    value = [15, 20, 30]        #物品价值
    bag = 4                     #背包大小
    
    dp = [0] * (bag + 1)        #初始化迭代数组

    for i in range(len(weight)):    # 外层遍历物品
        for j in range(bag, weight[i] - 1, -1):   #里层遍历背包,背包要采用倒序遍历
            dp[j] = max(dp[j],dp[j - weight[i]] + value[i])   
            #dp后面的参数永远是背包大小减物体重量

    return dp[bag]

2.装满容量为bag的背包,最多有几种方法

代码随想录 动态规划16题:目标和

class Solution:
    def findTargetSumWays(self, nums: List[int], target: int) -> int:
        total_sum = sum(nums)  # 计算nums的总和
        if abs(target) > total_sum:
            return 0  # 此时没有方案
        if (target + total_sum) % 2 == 1:
            return 0  # 此时没有方案
        target_sum = (target + total_sum) // 2  # 目标和,相当于bag

        dp = [0] * (target_sum + 1)  # 创建动态规划数组,初始化为0
        dp[0] = 1  # 当目标和为0时,只有一种方案,即什么都不选

        for num in nums:    #nums为物品重量与物品价值
            for j in range(target_sum, num - 1, -1):  #01背包采用倒序
                dp[j] += dp[j - num]  # 状态转移方程,累加不同选择方式的数量
        return dp[target_sum]  

二、完全背包 

 1. 给定背包大小bag,求背包装的最多物品的价值

代码随想录 动态规划18题:完全背包理论基础

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()

2.装满容量为bag的背包,最多有几种方法

代码随想录 动态规划19题:零钱兑换Ⅱ

class Solution:
    def change(self, amount: int, coins: List[int]) -> int:
        dp = [0]*(amount + 1)
        dp[0] = 1
        
        for i in range(len(coins)):                   # 遍历物品
            for j in range(coins[i], amount + 1):     # 遍历背包
                dp[j] += dp[j - coins[i]]
        return dp[amount]

3.完全背包排列问题:外层遍历背包容量,里层遍历物品种类

代码随想录 动态规划21题:组合总和Ⅳ

class Solution:
    def combinationSum4(self, nums: List[int], target: int) -> int:
        dp = [0] * (target + 1)
        dp[0] = 1
        for i in range(1, target + 1):  # 外层遍历背包
            for j in range(len(nums)):  # 里层遍历物品
                if i >= nums[j]:
                    dp[i] += dp[i - nums[j]]
        return dp[target]

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/728975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

three.jsgsap滚动交互网页实现 1-模糊背景线条

实现 模型只有其中的一根线条 加载完模型后 将其圆形排列一周 要实现圆形排列一周可以自己计算sin和cos实现,更简单的可以使用vector3的setFromCylindricalCoords方法实现 该方法计算返回圆柱上的点,圆柱上的点由参数决定 使用方法: for (let…

监听DOM尺寸变化 - ResizeObserver

一、与 MutationObserver Api的区别 MutationObserver 主要用来监听 DOM 元素的属性和节点变化的,非 DOM 样式尺寸,可查看之前一篇 blog - DOM规范 - MutationObserver接口观察DOM元素的属性和节点变化ResizeObserver 主要用来监听 DOM 元素的 内容区域…

Stable Diffusion WebUI 不同采样方法的效果、耗时对比记录

测试方法 所有测试除了采样方法调整,其他均保持一致。主要参数信息如下 1girl, 3d, architecture, blurry, blurry background, blurry foreground, breasts, brown hair, building, cherry blossoms, city, cityscape, cosplay photo, cowboy shot, day, depth o…

hive2.3.7安装部署-问题:show databases;没反应

目录 一、安装包准备 二、安装mysql 三、hive安装 四、hive启动 五、问题 环境:CentOS7.2.xx、hadoop2.6.4、jdk1.8.0xx、mysql-5.7.38 hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射成一张表,并提供类SQL查询功能。…

【计算机组成原理期末课设作业】16位微型计算机实现——MOVS串传送扩展指令设计

16位微型计算机实现——MOVS串传送扩展指令设计😎 前言🙌教学目的:1、数据**加粗样式**通路分析2、微程序控制器分析3、指令系统分析4、微程序控制器指令周期流程图5、微指令编码6、测试程序和运行结果(1)首先先在内存…

asp.net core 框架搭建2-搭建MVC后台管理系统

文章目录 系列文章1.项目搭建1.1 新建Asp.net core MVC项目1.2 ASP.NET Core MVC目录结构1.3 创建一个控制器,与页面数据交互1.4 实现一个登录页面1.5 实现后台管理主界面 2.过程中知识点和涉及到的问题2.1 session的使用2.2 EF Core连接mysql 源码下载 作者&#x…

机器学习29:《推荐系统-II》协同过滤

在《机器学习28:《推荐系统-I》概述》一文中,笔者介绍了“基于内容过滤(content-based filtering)”和“协同过滤(Collaborative Filtering)”两种常见的【候选 Item 池】生成方法。其中,基于内…

android studio使用Flutter Inspector调试布局

1、点击anroid studio右侧的Flutter Inspector按钮 2、点击展开布局右上角的‘Select Widget Mode’,即可实现点击相关节点,真机上可以看到相关的方框 如下图

月薪65k的大厂项目经理,是种什么体验

早上好,我是老原。 之前给大家更新了几期关于项目管理行业的面试题,又值一年毕业季,想入行的新手小白,或者想跳槽的行业大佬可以码起来了。 有很多粉丝朋友都在后台给我留言,想看云计算行业的岗位分析,今…

前端开发:JS中常用事件汇总

前言 在前端开发中,关于事件相关的操作是非常常见的操作,尤其是实际业务场景中涉及复杂交互的需求。在JS中比较常用的事件有很多,而且涉及不同方式不同类型的点击事件,一般情况下事件会和函数结合使用,这就是事件和函数…

Python 背包问题

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…

MySQL阶段DAY20(附笔记)

【注意】:工厂模式学习知识结构如下: (一)、单例模式 1.Single类: 使用懒汉式:对象的延迟加载,安全的,高效的应用 双重判断提升效率和安全性 package singleton;/** 单例设计模式之…

Prisma 国内镜像设置

背景 相信大家在体验完 prisma 后,一般都是会感觉开发起来很方便,功能使用起来很顺畅很爽,但是想推广起来团队内使用的时候发现。。。 原因是prisma client 需要下载几个引擎,在其他没有翻墙工具的小伙伴使用的时候发现一直下不下…

供应商管理解决方案实战指南:打造高效供应链

在现代商业环境中,供应商管理是企业成功运营的关键因素之一。随着全球化和供应链的复杂性不断增加,供应商管理面临着许多挑战,如供应商选择、供应商绩效评估和供应链风险管理等。为了解决这些挑战,企业需要采取一系列的解决方案&a…

Sui x KuCoin Labs夏季黑客松第四批入围项目公布

自Sui x KuCoin Labs夏季黑客松开放注册以来,收获了众多开发者的关注和报名参与。现在比赛的报名阶段已结束,截至目前为止,我们已经公布了三批入围项目名单,现在第四批入围名单项目新鲜出炉,最后一轮入围结果将于7月12…

十、HTML中的浮动

1、浮动 1、浮动 块级元素 独占一行 若块级元素宽度较少时,导致后续是空白 布局 先整体,后局部 先简单,再复杂 复杂再划分 整体布局 局部 2、float属性 浮动飘 float属性 让网页元素按照标准文档流方式显示 自上到下,…

19.内部温度传感器

1.STM32内部温度传感器介绍: 内部温度传感器支持的温度范围为:-40~125度,精度为1.5℃左右;T(℃){(V25-Vsense)/Avg_Slope}25;STM32的内部温度传感器是直接连接在ADC内部输入通道,在ADC1通道16连接的内部温度传感器&am…

Django基础入门⑬:Cookie和Session详讲和Django HTML表单实战讲解

Django基础入门⑫:Django 对象查询详解,分组聚合 Cookie和SessionCookie简述Session使用Session的定义理解Session的作用 Session配置Session的基本操作Session在settings.py中的配置Cookie和Session的区别 Django HTML表单实战HTML表单实现用户的登录实…

基于混沌集成决策树的电能质量复合扰动识别(matlab代码)

目录 1 主要内容 2 部分代码 3 程序结果 4 程序链接 1 主要内容 该程序参考《基于混沌集成决策树的电能质量复合扰动识别》,主要做的是S变换电能质量扰动识别,通过S变换对电能质量扰动(谐波,闪变,暂升等单一扰动和…

15 | 边界:微服务的各种边界在架构演进中的作用?

目录 演进式架构 微服务还是小单体? 微服务边界的作用 逻辑边界 物理边界 代码边界 正确理解微服务的边界 总结 那重点落到边界的时候,总结一下就是,微服务的设计要涉及到逻辑边界、物理边界和代码边界等等。 那么这些边界在微服务架…