当前位置: 首页 > 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]

相关文章:

  • 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更新国内源
  • 上海优化营商环境再攻坚,企业和机构有哪些切实感受?
  • 特色业务多点开花,苏州银行擦亮金融为民底色
  • 中国驻美国大使馆发言人就中美经贸高层会谈答记者问
  • 秦洪看盘|受阻回落,蓄积新做多能量
  • 江苏省泰州市委常委、宣传部部长刘霞接受审查调查
  • 外交部介绍中国赞比亚共同举办人工智能能力建设主题活动情况