当前位置: 首页 > news >正文

代码随想录算法训练营第三十九天| 动态规划03

01 背包问题 二维

代码随想录

视频讲解:带你学透0-1背包问题!| 关于背包问题,你不清楚的地方,这里都讲了!| 动态规划经典问题 | 数据结构与算法_哔哩哔哩_bilibili

注意点:

1. dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少

if __name__=="__main__":
    n,bagweight=map(int,input().split())
    weight=list(map(int,input().split()))
    value=list(map(int,input().split()))
    dp=[[0]*(bagweight+1) for _ in range(n)]
    for j in range(weight[0],bagweight+1):
        dp[0][j]=value[0]
    for i in range(1,n):
        for j in range(bagweight+1):
            if j<weight[i]:
                dp[i][j]=dp[i-1][j]
            else:
                dp[i][j]=max(dp[i-1][j],dp[i-1][j-weight[i]]+value[i])
    print(dp[n-1][bagweight])

01 背包问题 一维

代码随想录

视频讲解:带你学透01背包问题(滚动数组篇) | 从此对背包问题不再迷茫!_哔哩哔哩_bilibili

if __name__=="__main__":
    n,bagweight=map(int,input().split())
    weight=list(map(int,input().split()))
    value=list(map(int,input().split()))
    dp=[0]*(bagweight+1)
    
    for i in range(n):
        for j in range(bagweight,weight[i]-1,-1):
            dp[j]=max(dp[j],dp[j-weight[i]]+value[i])
    print(dp[bagweight])

416 分割等和子集

本题是 01背包的应用类题目

代码随想录

视频讲解:动态规划之背包问题,这个包能装满吗?| LeetCode:416.分割等和子集_哔哩哔哩_bilibili

class Solution:
    def canPartition(self, nums: List[int]) -> bool:
        total_sum = sum(nums)
        if total_sum % 2 != 0:
            return False
        target_sum = total_sum // 2
        dp = [[False] * (target_sum + 1) for _ in range(len(nums) + 1)]
       # 初始化第一行(空子集可以得到和为0)
        for i in range(len(nums) + 1):
            dp[i][0] = True

        for i in range(1, len(nums) + 1):
            for j in range(1, target_sum + 1):
                if j < nums[i - 1]:
                    # 当前数字大于目标和时,无法使用该数字
                    dp[i][j] = dp[i - 1][j]
                else:
                    # 当前数字小于等于目标和时,可以选择使用或不使用该数字
                    dp[i][j] = dp[i - 1][j] or dp[i - 1][j - nums[i - 1]]

        return dp[len(nums)][target_sum]

http://www.dtcms.com/a/19794.html

相关文章:

  • 19.Python实战:实现对博客文章的点赞系统
  • 微信小程序中缓存数据全方位解惑
  • Unity 编辑器热更C# FastScriptReload
  • 安卓基础(Adapter)
  • JVM 底层探秘:对象创建的详细流程、内存分配机制解析以及线程安全保障策略
  • React生产环境下使用mock.js
  • VueRouter 实例
  • 单、双 链 表
  • MIMO信号检测ZF算法和MMSE算法
  • 深度求索—DeepSeek API的简单调用(Java)
  • 简单的异步图片上传
  • 游戏引擎学习第104天
  • ABB能源自动化选用宏集Cogent DataHub避免DCOM问题,实现高效、安全的数据传输
  • cuML机器学习GPU库
  • vue3的响应式的理解,与普通对象的区别
  • ROS基本功能
  • 【吾爱出品】视频素材资源搜索、解析、下载助手
  • 深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器
  • 自动化运维之ansible快速入门
  • Ubuntu24.04更新国内源
  • Facebook精准获客:外贸企业如何通过社群营销将产品推广到海外
  • 【2025最新版】软件测试面试题总结(150道题含答案解析)
  • C++ 后台开发简历优化指南和如何利用DeepSeek优化简历
  • 【MySQL数据库】Ubuntu下的mysql
  • 侯捷 C++ 课程学习笔记:C++ 面向对象开发的艺术
  • 协议-NVME
  • springboot整合mybatis-plus(保姆教学) 及搭建项目
  • 离线量化算法和工具 --学习记录1
  • mongodb主从
  • Linux软件编程——标准IO(2025.2.14)