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

【代码随想录训练营】【Day 44】【动态规划-4】| 卡码 46, Leetcode 416

【代码随想录训练营】【Day 44】【动态规划-4】| 卡码 46, Leetcode 416

需强化知识点

  • 背包理论知识

题目

卡码 46. 携带研究材料

  • 01 背包理论基础
  • 01 背包理论基础(滚动数组)
  • 01 背包 二维版本:dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少,注意 遍历和初始化时 n 要取到
  • 01 背包 一维版本:dp[j]为 容量为j的背包所背的最大价值,注意 先遍历 物品,再重量(倒序遍历)

def func(m, n, weight, value):# dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。# 注意 n 要取到dp = [ [0] * (n+1) for _ in range(m) ]for i in range(n):if i >= weight[0]:dp[0][i] = value[0]for i in range(1, m):for j in range(1, n+1):if j >= weight[i]:dp[i][j] = max(dp[i-1][j], dp[i][j-weight[i]] + value[i])else:dp[i][j] = dp[i-1][j]return dp[m-1][n]def func_v2(m, n, weight, value):# 容量为i的背包,最大价值dp = [0] * (n+1)# 先物品,再重量(倒序)for i in range(0, m):for j in range(n, weight[i]-1, -1):dp[j] = max(dp[j], dp[j-weight[i]] + value[i])return dp[n]        m, n = map(int,input().split())
weight = list(map(int,input().split()))
value = list(map(int,input().split()))print(func_v2(m, n, weight, value))

416. 分割等和子集

  • 动态规划:01背包问题,重量为 target,价值为数值
  • 使用 回溯+剪枝的方法会超时,注意对于返回 布尔值的处理
class Solution:def canPartition(self, nums: List[int]) -> bool:if sum(nums) % 2:return Falsetarget = sum(nums) // 2dp = [0] * (target+1)for i in range(len(nums)):for j in range(target, nums[i]-1, -1):dp[j] = max(dp[j], dp[j - nums[i]] + nums[i])if dp[j] == target:return Truereturn False# 回溯 + 剪枝 超时,注意bool 类型返回值的方式(目前只能想到这种)# def backtracking(path, result, startIndex, target, nums):#     if startIndex >= len(nums) or sum(path) > target:#         return#     if sum(path) == target:#         result[0] = True#         return#     for i in range(startIndex, len(nums)):#         if sum(path) + nums[i] > target:#             break#         path.append(nums[i])#         backtracking(path, result, i+1, target, nums)#         path.pop()# result = [False]# if sum(nums) % 2:#     return False# else:#     nums.sort()#     backtracking([], result, 0, sum(nums) // 2, nums)#     return result[0]
http://www.lryc.cn/news/368542.html

相关文章:

  • html5实现个人网站源码
  • 【内存管理】内存布局
  • 软件试运行方案(Word)
  • Redis原理篇——哨兵机制
  • web前端的MySQL:跨领域之旅的探索与困惑
  • Postgresql源码(135)生成执行计划——Var的调整set_plan_references
  • Python魔法之旅专栏(导航)
  • Python第二语言(五、Python文件相关操作)
  • Vue3 组合式 API:依赖注入(四)
  • Vue如何引入ElementUI并使用
  • VS2019 QT无法打开 源 文件 “QTcpSocket“
  • 【Golang】Map 稳定有序遍历的实现与探索:保序遍历之道
  • 使用Nextjs学习(学习+项目完整版本)
  • KUKA机器人KRC5控制柜面板LED显示
  • 为什么选择Python作为AI开发语言
  • 【算法篇】求最长公共前缀JavaScript版本
  • 搭建RocketMQ主从异步集群
  • 最大子段和问题
  • Vue3中的常见组件通信之mitt
  • MySQL快速入门(极简)
  • CentOS7安装NVIDIA显卡驱动指引【笔记】
  • 【RabbitMQ】RabbitMQ配置与交换机学习
  • 常见排序算法,快排,希尔,归并,堆排
  • 语法的时态1——一般现在时(1)
  • JAVA:在IDEA引入本地jar包的方法并解决打包scope为system时发布无法打包进lib的方案
  • Hadoop3:MapReduce源码解读之Map阶段的CombineFileInputFormat切片机制(4)
  • GPT-4o:OpenAI的最新篇章与深度探索
  • OpenGauss数据库-5.数据更新
  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 机场航班调度程序(100分) - 三语言AC题解(Python/Java/Cpp)
  • Spark作业运行异常慢的问题定位和分析思路