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

更弱智的算法学习day 37

完全背包

完全背包问题和01背包的区别主要在“物品可以重复添加”这里。在代码上的区别只有,可以重复选择一个物品;也正是我们在01背包里要注意的,可以选择一个物品,也即内存循环可以从前往后遍历

# 输入 n, bag_weight = map(int, input().split()) weight = [] value = [] for _ in range(n): w, v = map(int, input().split()) weight.append(w) value.append(v) dp = [0] * (bag_weight+1) for i in range(0,n): for j in range(0,bag_weight+1): if j >= weight[i]: dp[j] = max(dp[j] , dp[j-weight[i]]+ value[i]) print(dp[bag_weight])

518. 零钱兑换 II

dp函数的意义:

对应dp[amount]而言,其意义是:当还需要amount面额需要补充时,存在能凑成amount的金额的硬币组合数。

状态转移方程:

也即存在选或不选两种情况:

不选i:dp[i] = dp[i]

选了i:dp[i] = dp[i-1]

因此 dp[j] += dp[j-i]

遍历顺序:

因为是完全背包问题,因此先遍历硬币,在遍历金额,顺序遍历

初始化:

由于金额为0时,有1中选择方法,也即全不选。故dp[0]=1

class Solution: def change(self, amount: int, coins: List[int]) -> int: dp = [0]*(amount+1) dp[0] = 1 for i in coins: for j in range(i, amount+1): dp[j] += dp[j-i] return dp[amount]

377. 组合总和 Ⅳ

dp函数的意义:

对应dp[target]而言,其意义是:存在一个目标整数target时,从nums中找出的元素排列个数为dp[target]个

状态转移方程:

也即存在选或不选两种情况:

不选i:dp[i] = dp[i]

选了i:dp[i] = dp[i-1]

因此 dp[j] += dp[j-i]

遍历顺序:

因为是完全背包问题,且是求排列数,因此先便利整数,在遍历数组从而实现顺序不同也可以保存下来

初始化:

因为递推公式dp[i] += dp[i - nums[j]]的缘故,dp[0]要初始化为1,这样递归其他dp[i]的时候才会有数值基础。

dp[0]=1

class Solution: def combinationSum4(self, nums: List[int], target: int) -> int: dp = [0] * (target+1) dp[0] = 1 for j in range(1, target+1): for i in nums: if j >= i: dp[j] += dp[j-i] return dp[target]

70. 爬楼梯 (进阶)

dp函数的意义:

对应dp[n]而言,其意义是:存在一个台阶数n时,从m中找出的楼梯排列个数为dp[n]个

状态转移方程:

也即存在选或不选两种情况:

不选i:dp[i] = dp[i]

选了i:dp[i] = dp[i-1]

因此 dp[j] += dp[j-i]

遍历顺序:

因为是完全背包问题,且是求排列数,因此先便利总数,在遍历数组从而实现顺序不同也可以保存下来

初始化:

因为递推公式dp[i] += dp[i - nums[j]]的缘故,dp[0]要初始化为1,这样递归其他dp[i]的时候才会有数值基础。

dp[0]=1

n,m = map(int, input().split()) dp = [0] * (n+1) dp[0] = 1 for j in range(1,n+1): for i in range(1,m+1): if i <= j: dp[j] += dp[j-i] print(dp[n])
http://www.jsqmd.com/news/245532/

相关文章:

  • 服务器用 Linux,和个人电脑用 Linux 有什么不同?
  • 非达霉素Fidaxomicin治愈艰难梭菌感染的时间与复发预防剂量
  • 水质氟化物检测仪:技术原理、行业应用与智能化解决方案深度解析
  • 从背调公司到企业风控能力的内化:一种新的选择
  • python基于vue的汽车租赁系统的续租django flask pycharm
  • 什么是SAC
  • python基于vue的美食外卖点餐平台的设外卖员商家django flask pycharm
  • 成都移动直连中国香港公网线路
  • 为什么经济学里有那么多数学公式?
  • 开源BI天花板!SuperSonic融合Chat BI+Headless BI,自然语言直接查数据
  • 深度学习分析公司文化与业绩关系
  • 演唱会购票系统的设计与实现
  • Windows 11 Hyper-V 虚拟机双网卡网络中断无法恢复问题
  • 背景调查:建立企业与人才间的信任基石
  • AI原生应用开发必知:上下文理解的10个最佳实践
  • 2026实测:10款免费的AI降重工具,真正能降AI工具推荐,亲测有效【避坑指南】
  • java学习--LinkedList
  • java学习--HashSet
  • java学习--LinkedHashSet
  • 渗透测试——Funbox2靶机渗透提权详细过程(FTP匿名登陆与SSH爆破)
  • qt qbrush设置填充与取消填充
  • 为什么选择PPO而不是DQN
  • 告别高成本低效率!“轻竹办公AIPPT”高性价比搞定PPT制
  • Springboot影视周边电商平台hlnap(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 2026年降AIGC终极指南:10款主流降AI工具深度横评,看这篇就够了【建议收藏】
  • Springboot应急信息管理及统计分析系统5y51w(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • TVS管并联提升通流为何反而导致钳位不稳?
  • 安全左移:国产信创DevOps平台的安全(DevSecOps)构建与实践
  • 破局多平台管理困境:一体化终端管理如何成为企业效率引擎?
  • 2026降AIGC工具大盘点:免费、在线、一键生成,亲测10款降ai工具,到底哪个更适合你?