更弱智的算法学习 day36

1049. 最后一块石头的重量 II

可以这么理解,有一个target = sums // 2,也即有一个目标数组和的一半,把他视为石头一半重量,想要达到的最大价值也即石头一般的重量,每个石头的价值和重量都是他本身。

  • 确定dp数组(dp table)以及下标的含义定义

dp[j]数组表示,石头的当前总重量为j时(也即总目标减去消耗的数值),所能得到的最大值

  • 确定递推公式

dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);

还是同样的 dp[j] = max(dp[j], dp[j-nums[j]] + nums[j])

还是同样的dp[j] = max(dp[j], dp[j - stones[i]] + stones[i])

  • dp数组如何初始化

全初始化为0

  • 确定遍历顺序

先顺序遍历道具,在反向遍历背包重量

  • 举例推导dp数组
class Solution: def lastStoneWeightII(self, stones: List[int]) -> int: sums = sum(stones) target = sums // 2 dp = [0] * (target + 1) for i in range(len(stones)): for j in range(target, stones[i]-1, -1): dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]) return sums-dp[target]*2

494. 目标和

设所有数字的总和为sum_nums。我们将添加+的数字集合记为P,其和为plus_sum;添加-的数字集合记为N,其和为minus_sum。则有:

plus_sum + minus_sum = sum_nums (1) plus_sum - minus_sum = target (2)

从上述方程可以推导出两种等价的转化:

  1. 求正数子集和​:由 (1) + (2) 得:

    2 * plus_sum = sum_nums + target plus_sum = (sum_nums + target) / 2

    问题转化为:从nums中选取若干数字,使其和为(sum_nums + target)/2

  2. 求负数子集和​:由 (1) - (2) 得:

    2 * minus_sum = sum_nums - target minus_sum = (sum_nums - target) / 2

    问题转化为:从nums中选取若干数字,使其和为(sum_nums - target)/2

  • 确定dp数组(dp table)以及下标的含义定义

dp[j]数组表示,选取的数字和为j的方法数

  • 确定递推公式
dp[j] += dp[j - num]

这里其实就是dp[j] = dp[j]+dp[j-num]

有选num这个数和不选num这个数两种方法:选了就是dp[j];不选就是dp[j-num]

  • dp数组如何初始化

dp[0] = 1,由于数都大于0,取0的方法只有一种,就是全都不取

  • s < 0:表示abs(target)大于总和,无法实现。

  • s % 2 == 1:表示s是奇数,则new_target = s//2不是整数,而数字和必须是整数。

  • 确定遍历顺序

先顺序遍历数,在遍历背包大小,也即还剩多少数

  • 举例推导dp数组
class Solution: def findTargetSumWays(self, nums: List[int], target: int) -> int: s = sum(nums)-abs(target) if s<0 or s%2==1: return 0 new_target = s//2 dp = [0] * (new_target + 1) dp[0] = 1 for i in range(len(nums)): for j in range(new_target, nums[i]-1, -1): dp[j] += dp[j-nums[i]] return dp[new_target]

474.一和零

相当于背包有两层约束,0和1的数量都不能超了

  • 确定dp数组(dp table)以及下标的含义定义

dp[p][q]数组表示,还剩余可用的p个0和q个1在strs中的最大子集的长度

  • 确定递推公式

显然选择只有两种,选择把strs加入子集和不加入子集,加入子集要消耗对应的0的数量和1的数量,然后子集长度+1,在前面计算好保存在二维数组中了。不加入子集就没有变化。

dp[p][q] = max(dp[p-number[i][0]][q-number[i][1]] + 1,dp[p][q])

  • dp数组如何初始化

都归化为0即可

  • 确定遍历顺序

先顺序遍历字符串,在遍历背包大小的两个维度约束

  • 举例推导dp数组
class Solution: def findMaxForm(self, strs: List[str], m: int, n: int) -> int: number = [] for k in range(len(strs)): num0 = strs[k].count('0') num1 = strs[k].count('1') number.append([num0, num1]) dp = [[0] * (n+1) for _ in range(m+1)] for i in range(len(number)): for p in range(m, number[i][0]-1, -1): for q in range(n, number[i][1]-1, -1): dp[p][q] = max(dp[p-number[i][0]][q-number[i][1]] + 1,dp[p][q]) return dp[m][n]

可以通过下面的方法来简化数组的使用,但是差别不大

class Solution: def findMaxForm(self, strs: List[str], m: int, n: int) -> int: f = [[0] * (n + 1) for _ in range(m + 1)] for s in strs: cnt0 = s.count('0') cnt1 = len(s) - cnt0 for j in range(m, cnt0 - 1, -1): for k in range(n, cnt1 - 1, -1): f[j][k] = max(f[j][k], f[j - cnt0][k - cnt1] + 1) return f[m][n]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1160748.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

社会责任验厂里的BSCI,SEDEX,SA8000都需要吗?

BSCI、SA8000和SEDEX&SMETA作为三种重要的社会责任验厂标准&#xff0c;各自具有不同的特点和适用范围。 BSCI注重跨国供应链管理&#xff0c;适用于所有行业&#xff1b; SA8000作为全球首个道德规范国际标准&#xff0c;关注工人的权益&#xff0c;适用于长期保持社会责任…

最新AI-Python自然科学领域机器学习与深度学习技术

随着观测技术、数值模拟与计算基础设施的迅猛发展&#xff0c;地球系统科学、生态学、环境科学等自然科学领域正迈入“大数据智能模型”驱动的新阶段。传统的统计建模方法虽具可解释性&#xff0c;却难以应对高维、非线性、多源异构的复杂自然系统&#xff1b;而以机器学习和深…

从混乱到高效:2026年玄微科技如何重塑孕产门店运营?

在孕产健康管理行业快速发展的今天&#xff0c;门店运营的精细化与智能化已成为提升竞争力的关键。面对市场上众多管理系统选项&#xff0c;如何选择正规且适配的专业解决方案&#xff0c;成为行业从业者的核心关切。本文聚焦孕产场景&#xff0c;深入分析行业需求&#xff0c;…

2026年:当传统月子中心还在拼人力,玄微子AI智能体已在拼算力

月子中心里&#xff0c;一位产后妈妈通过智能终端接收个性化的营养方案和恢复训练指导&#xff0c;背后是AI智能体对多维度健康数据的实时分析与决策。随着社会经济发展和人们健康意识的提升&#xff0c;越来越多的家庭愿意为产后恢复投入更多资源&#xff0c;相关服务市场近年…

更弱智的算法学习day 37

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

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

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

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

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

水质氟化物检测仪:技术原理、行业应用与智能化解决方案深度解析

引言水是生命之源&#xff0c;其质量的细微变化直接关联着生态安全与公共健康。在众多水质指标中&#xff0c;氟化物的地位独特而关键。作为一种“双面”元素&#xff0c;饮用水中适宜的氟浓度&#xff08;通常为0.5-1.0毫克/升&#xff09;能有效预防龋齿&#xff0c;但一旦超…

python基于vue的汽车租赁系统的续租django flask pycharm

目录 基于Vue与Python的汽车租赁系统续租功能实现 开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 基于Vue与Python的汽车租赁系统续租功能实现 技术栈组合 系统采用前后端分离架构&#x…

什么是SAC

文章目录为什么需要SACSAC应用场景是怎样的SAC是如何工作的SAC&#xff08;Smart Application Control&#xff0c;智能应用控制&#xff09;引入业务感知技术&#xff0c;对报文中的第4&#xff5e;7层内容和一些动态协议(如HTTP、RTP)进行检测和分类&#xff0c;然后根据分类…

python基于vue的美食外卖点餐平台的设外卖员商家django flask pycharm

目录基于Python与Vue的美食外卖点餐平台设计摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;基于Python与Vue的美食外卖点餐平台设计摘要 该平台采用前后端分离架构&#xff0c;前端使用…

为什么经济学里有那么多数学公式?

要深入理解 “经济学里数学公式多” 的现象&#xff0c;需要从 **“工具的合理必要性”“学术生态的非理性内卷”** 两个层面结合分析 —— 前者解释了数学公式 “为何存在”&#xff0c;后者解释了数学公式 “为何过多甚至泛滥”&#xff0c;二者共同构成了当前经济学中数学公…

开源BI天花板!SuperSonic融合Chat BI+Headless BI,自然语言直接查数据

开源BI天花板&#xff01;SuperSonic融合Chat BIHeadless BI&#xff0c;自然语言直接查数据。还在为写SQL查数据头疼&#xff1f;还在纠结Chat BI的“幻觉”问题&#xff1f;今天给大家推荐一款颠覆式开源BI平台——SuperSonic&#xff01;它创新性融合Chat BI&#xff08;LLM…

成都移动直连中国香港公网线路

成都移动直连中国香港公网线路 摘要 在不考虑IEPL、IPLC等国际专线的情况下&#xff0c;成都移动用户连接中国香港的公网线路选择对网络性能至关重要。本文通过深入的路由分析、性能测试和成本评估&#xff0c;系统对比CMIv2、CMIv1及各类绕路方案的技术特性&#xff0c;为成都…

深度学习分析公司文化与业绩关系

深度学习分析公司文化与业绩关系 关键词:深度学习、公司文化、公司业绩、关系分析、数据挖掘 摘要:本文聚焦于运用深度学习技术来分析公司文化与业绩之间的关系。首先介绍了研究的背景、目的、预期读者等信息,接着阐述了核心概念及它们之间的联系,详细讲解了用于分析的核心…

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

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

演唱会购票系统的设计与实现

一、研究背景如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传播的主要途…

背景调查:建立企业与人才间的信任基石

在当今的商业环境中&#xff0c;人才已成为企业最核心的资产。一次关键的招聘决策&#xff0c;往往直接影响着企业的未来发展轨迹。然而&#xff0c;当候选人的简历在字面上完美无瑕时&#xff0c;如何透过表象洞察实质&#xff0c;成为了企业人力资源管理的核心挑战。专业的背…

AI原生应用开发必知:上下文理解的10个最佳实践

AI原生应用开发必知&#xff1a;上下文理解的10个最佳实践关键词&#xff1a;AI原生应用、上下文理解、对话系统、多模态交互、用户意图、实体追踪、动态窗口、歧义消除、评估指标、LLM调优摘要&#xff1a;在AI原生应用中&#xff0c;“上下文理解"是让AI从"机械回答…

从背调公司到企业风控能力的内化:一种新的选择

当招聘决策的复杂性不断增加&#xff0c;越来越多的企业开始寻求专业背景调查公司的支持。传统背调公司以专业服务和行业经验为核心&#xff0c;为企业提供了候选人信息核实的重要保障。然而&#xff0c;随着企业数据化管理的深入&#xff0c;一种新的需求正在浮现&#xff1a;…