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

【Day30】卡码网:46. 携带研究材料,LeetCode:416. 分割等和子集

文章目录

  • 卡码网:46. 携带研究材料
    • 0-1背包问题,二维
      • 思路
      • 解答
    • 0-1背包问题,一维
      • 思路
      • 解答
  • LeetCode:416. 分割等和子集
    • 思路
    • 解答

卡码网:46. 携带研究材料

https://kamacoder.com/problempage.php?pid=1046

0-1背包问题,二维

思路

  1. 定义:dp[i][j]表示只考虑前i件物品(索引从0i),在背包容量为j时能获得的最大价值。最终目标为dp[n-1][bag]
  2. 状态转移方程:
    (1)当j < weight[i](当前容量放不下第i件物品)时:
    dp[i][j] = dp[i-1][j],即不选第i件,结果与前i - 1件相同。
    (2)当j >= weight[i](可以放下第i件物品)时:
    dp[i][j] = max(dp[i-1][j], dp[i-1][j - weight[i]] + value[i])
    不选:价值为dp[i-1][j]
    选:先腾出weight[i]的空间(j - weight[i]),加上第i件的价值。
  3. 初始化:所有dp[i][j]初始化为0。

解答

first_line=input().split()n=int(first_line[0])bag=int(first_line[1])second_line=input().split()third_line=input().split()weight=[int(x)forxinsecond_line]value=[int(x)forxinthird_line]dp=[[0]*(bag+1)for_inrange(n)]forjinrange(weight[0],bag+1):dp[0][j]=value[0]foriinrange(1,n):forjinrange(bag+1):ifj<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][bag])

0-1背包问题,一维

思路

  1. 定义:dp[j]表示当前考虑的物品范围内,背包容量为j时能获得的最大价值。
  2. 状态转移方程:dp[j] = max(dp[j], dp[j - w] + v) (j >= w)
  3. 初始化:dp = [0] * (bag + 1)

解答

first_line=input().split()n=int(first_line[0])bag=int(first_line[1])second_line=input().split()third_line=input().split()weight=[int(x)forxinsecond_line]value=[int(x)forxinthird_line]dp=[0]*(bag+1)# dp[j] 表示容量 j 能获得的最大价值foriinrange(n):w=weight[i]v=value[i]# 逆序遍历,保证每种物品只选一次forjinrange(bag,w-1,-1):dp[j]=max(dp[j],dp[j-w]+v)print(dp[bag])

LeetCode:416. 分割等和子集

https://leetcode.cn/problems/partition-equal-subset-sum/description/
添加链接描述

思路

转化为01-背包问题:每个元素只能选或不选,背包容量为target,求是否能恰好装满。

解答

classSolution:defcanPartition(self,nums:List[int])->bool:total=sum(nums)# 总和为奇数则无法平分iftotal%2!=0:returnFalsetarget=total//2n=len(nums)# dp[j] 表示当前已考虑的元素能否凑出和为 jdp=[False]*(target+1)dp[0]=Truefornuminnums:# 从后往前更新,避免重复使用当前元素forjinrange(target,num-1,-1):dp[j]=dp[j]ordp[j-num]returndp[target]
http://www.jsqmd.com/news/523787/

相关文章:

  • 力扣刷题——104.二叉树的最大深度
  • VIT
  • 这里藏着电力系统的核心评判指标
  • Gemini 3场景化应用指南:原生多模态与超长上下文能解决哪些实际问题?
  • 倒数第四天
  • InnoDB底层原理之MySQL的日志机制
  • Visual Place Recognition
  • 密码学学习记录
  • Go语言基础之数组
  • 世毫九实验室九大衍生理论课题与技术攻关方向(初审意见)
  • ai---openClaw 配置企业微信
  • CloudFlare域名接入与Nginx真实IP获取实战指南
  • LeetCode 234. 回文链表
  • 永磁同步电机FOC最小损耗算法
  • ESP32开发板国内镜像加速安装指南(附2023最新可用JSON地址)
  • 48个适合人力资源工作和运营的AI提示词
  • 基于MATLAB Simulink的PEM电解槽制氢仿真模型研究
  • 【认知雷达(Cognitive Radar)与深度学习融合架构】第5章 LSTM时序预测与多目标轨迹关联
  • 探索异构混合阶多智能体系统的一致性:UGV 与 UAV 的协同之旅
  • 51单片机初相识
  • 基于多因子定价模型解析:美元强势与利率预期重构驱动的金价8连跌机制
  • Cube MX实战:如何用STM32F系列和ADS1255构建高精度电流源(附完整代码)
  • 分布式驱动电动汽车:最优横摆力矩控制与规则扭矩分配控制的对比研究——基于LQR计算与最小附着利...
  • 聚焦镀锌管/角钢/方管/螺旋管,精选本土标杆企业,助力工程采购决策 - 深度智识库
  • Timer-S1 正式发布:首个十亿级时序基础模型,预测性能达到 SOTA
  • 从这8道Swift题逆袭大厂:2025最新类型系统考点精讲(含泛型实战)
  • 从干系人管理到项目交付:绩效域全流程避坑指南
  • SCN-Adaboost随机配置网络模型的多特征输入二分类及多分类模型实现
  • OpenClaw本地快速部署指南及主流AI模型API接入方法
  • 都在用 Java8 或 Java17,那 Java9 到 16 呢?他们真的没用吗?