news 2026/4/23 12:51:22

更弱智的算法学习day 37

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
更弱智的算法学习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])
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 0:16:49

曹梦岐:金华学派的最后一位先生

曹梦岐&#xff1a;金华学派的最后一位先生在浙江兰溪梅江镇的聚仁村&#xff08;原蒋畈村&#xff09;&#xff0c;有一位被儿子曹聚仁尊为 "金华学派最后一个学者" 的传奇人物 —— 曹梦岐。他谱名学应&#xff0c;字文昭&#xff0c;号良叙&#xff0c;生于 1875 …

作者头像 李华
网站建设 2026/3/27 4:55:45

Windows 11 Hyper-V 虚拟机双网卡网络中断无法恢复问题

Windows 11 Hyper-V 虚拟机双网卡网络中断无法恢复问题 问题概述 在Windows 11专业版24H2环境中&#xff0c;当宿主机物理网卡经历链路状态变化时&#xff0c;Hyper-V虚拟机内部对应虚拟网卡会出现无法恢复网络连接的致命问题。此问题在特定网络配置下表现尤为突出。 系统环境 …

作者头像 李华
网站建设 2026/4/20 3:44:33

服务器用 Linux,和个人电脑用 Linux 有什么不同?

提到 Linux,很多人第一反应是「程序员用的系统」「服务器后台在跑的系统」。但实际上,Linux 既可以装在云服务器上,也可以像 Windows、macOS 一样装在个人电脑上使用。 那么,同样是 Linux,服务器用的 Linux 和个人电脑用的 Linux,到底有什么不同? 定位不同 最核心的区…

作者头像 李华
网站建设 2026/4/18 0:34:43

非达霉素Fidaxomicin治愈艰难梭菌感染的时间与复发预防剂量

艰难梭菌感染&#xff08;CDI&#xff09;作为医院获得性腹泻的首要病因&#xff0c;其高复发率长期困扰临床。传统治疗依赖万古霉素和甲硝唑&#xff0c;但复发率仍达20%-30%&#xff0c;且可能破坏肠道菌群平衡。非达霉素&#xff08;Fidaxomicin&#xff09;凭借其窄谱杀菌机…

作者头像 李华
网站建设 2026/4/20 6:34:53

Windows 下往 Elasticsearch 添加数据

结论先行&#xff08;给你选项&#xff09; Windows 下往 Elasticsearch 添加数据&#xff0c;只有这 4 种正经方式&#xff1a; curl&#xff08;最直接&#xff0c;命令行&#xff09;Kibana Dev Tools&#xff08;最舒服&#xff09;PowerShell&#xff08;Windows 原生&…

作者头像 李华