代码随想录day38 动态规划(4)

1049. 最后一块石头的重量 II - 力扣(LeetCode) 

难点在于将此问题转为0-1背包问题。思路是将石头分为重量尽可能接近的两堆,两堆之间对碰,到最后剩下的重量会最小。解法与分割等和子集类似。易错点是遍历target时从后往前。

class Solution:def lastStoneWeightII(self, stones: List[int]) -> int:if len(stones) == 1:return stones[0]target = sum(stones) // 2dp = [0 for _ in range(target+1)]for i in range(len(stones)):for j in range(target, 0, -1):if stones[i] <= j:dp[j] = max(dp[j], dp[j-stones[i]] + stones[i])sum1 = dp[-1]sum2 = sum(stones) - sum1return abs(sum1 - sum2)

 

494. 目标和 - 力扣(LeetCode)

    相当于将nums分为两部分,第一部分的数取正,第二部分数取负,使得加上正负号后的和为target。易得第一部分的数的和为possum = (sum(nums)  + target) // 2。

    当possum无法通过整除得到、或possum超出可能的范围,无法得到题意的组合,返回0。

    接下来在nums中找到和为possum的数的组合数。dp[j]表示第0个数到当前数范围内取数,能得到和==j的组合数。

    dp[0]初始为0,表示只有空集这一种方案满足和==0。

    正序遍历nums、倒叙遍历dp,对当前数nums[i],若它大于j,只能不选择它,此时dp[j]不需改变(沿用上一个数,即“上一行”的值);若它不大于j,可以选择不让nums[i]加入,对应dp[j]种组合数,也可以选择让nums[i]加入,对应dp[j-nums[i]]种组合数,新的dp[j]是这两种选择对应的组合数之和

class Solution:def findTargetSumWays(self, nums: List[int], target: int) -> int:tmp = (sum(nums) + target)if tmp % 2:return 0possum = tmp // 2if possum > sum(nums) or possum < 0:return 0#basedp = [0 for _ in range(possum+1)]dp[0] = 1for i in range(len(nums)):for j in range(possum, -1, -1):if j >= nums[i]:dp[j] += dp[j-nums[i]]return dp[-1]

474. 一和零 - 力扣(LeetCode)

class Solution:def cnt(self, str):n0 = 0n1 = 0for c in str:if c == '0':n0 += 1if c == '1':n1 += 1return n0, n1def findMaxForm(self, strs: List[str], m: int, n: int) -> int:dp = [[0 for _ in range(n+1)] for _ in range(m+1)]for s in strs:n0, n1 = self.cnt(s)for i in range(m, n0-1, -1):for j in range(n, n1-1, -1):dp[i][j] = max(dp[i][j], dp[i-n0][j-n1] + 1)return dp[-1][-1]

写成这样也可以: 

class Solution:def cnt(self, str):n0 = 0n1 = 0for c in str:if c == '0':n0 += 1if c == '1':n1 += 1return n0, n1def findMaxForm(self, strs, m: int, n: int) -> int:dp = [[0 for _ in range(n+1)] for _ in range(m+1)]for s in strs:for i in range(m, -1, -1):for j in range(n, -1, -1):n0, n1 = self.cnt(s)if n0 <= i and n1 <= j:dp[i][j] = max(dp[i][j], dp[i-n0][j-n1] + 1)return dp[-1][-1]

注意遍历strs时,对每个字符串i和j的范围不可以是range(m, 0, -1),因为这是二维的背包,仅凭i==0或j==0不能判定只有空串满足条件,也可以是只有1或只有0的字符串,所以dp[0][x]或dp[x][0]不一定为0;只有dp[0][0]一定为0.

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

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

相关文章

关于软件本地化,您应该了解什么?

软件本地化是调整软件应用程序以满足目标市场的语言、文化和技术要求的过程。它不仅仅涉及翻译用户界面&#xff1b;它包含一系列活动&#xff0c;以确保软件在目标语言环境中可用且相关。以下是您应该了解的有关软件本地化的一些关键方面&#xff1a; 了解范围 软件本地化是…

0704模拟记录

1.完美数 暴力 #include <iostream> #include <vector>using namespace std;bool perfect(long long res) {if (res < 10) {return true;}else if (res > 10 && res < 100 && res % 10 0) {return true;}else if (res > 100 &&…

华为机试HJ12字符串反转

华为机试HJ12字符串反转 题目&#xff1a; 接受一个只包含小写字母的字符串&#xff0c;然后输出该字符串反转后的字符串。&#xff08;字符串长度不超过1000&#xff09; 想法&#xff1a; 针对输入字符串从后往前遍历&#xff0c;输出反转字符串 input_str input()resu…

requets.GET.get()怎样使用?

request.GET.get()是Django中用于获取GET请求参数的方法。 使用方法如下&#xff1a; 在视图函数中引入HttpRequest模块&#xff1a;from django.http import HttpRequest在视图函数中使用request.GET.get()方法获取GET请求参数&#xff0c;参数为需要获取的参数名 def my_…

水利水电安全员C证考试题库资料,2024年全国考试通用!

1.安全生产民事责任&#xff0c;是指责任主体违反安全生产法律规定造成&#xff08;&#xff09;&#xff0c;由人民法院依照民事法律强制其行使民事赔偿的一种法律责任。民事责任追究的目的是为了最大限度的维护当事人受到民事损害时享有获得民事赔偿的权利。 A.民事损伤 B.…

针对SVN、GIT版本管理工具进行源代码加密保护

针对SVN、GIT版本管理工具进行源代码加密保护 在软件开发过程中&#xff0c;版本管理工具如SVN和GIT是不可或缺的组成部分&#xff0c;它们帮助团队管理源代码的变更和版本。然而&#xff0c;这些工具也面临着源代码泄露的安全风险。如果不针对数据进行加密保护&#xff0c;很…

如何从腾讯云迁移到AWS

随着跨境出海潮不断扩大&#xff0c;企业越来越意识到将工作负载迁移到海外节点的必要性&#xff0c;以获取更多功能、灵活性和性能。然而&#xff0c;顺利迁移业务主机并确保业务稳定访问是一项具有挑战性的任务。在此挑战中&#xff0c;借助AWS迁移工具和迁移流程的强大支持&…

003 线程的暂停和中断

文章目录 暂停中断**阻塞情况下中断&#xff0c;抛出异常后线程恢复非中断状态&#xff0c;即 interrupted false**调用Thread.interrupted() 方法后线程恢复非中断状态 暂停 Java中线程的暂停是调用 java.lang.Thread 类的 sleep 方法。该方法会使当前正在执行的线程暂停指定…

如何检查购买的Facebook账号优劣?

Facebook 是全球最受欢迎的社交网络之一,为品牌广告提供了巨大的潜力。许多公司和营销人员使用 Facebook 来推广他们的产品和服务&#xff0c;经常会购买账号。当然也分出了很多账号&#xff0c;比如个人号&#xff0c;BM号&#xff0c;广告号&#xff0c;小黑号等等。 但是,有…

Python中转换图片分辨率而不保存到磁盘的方法

如果你想要直接在Python中处理图片而不保存到磁盘&#xff0c;你可以在内存中创建一个调整大小后的图片对象&#xff0c;然后根据需要使用它。这里是一个python代码的示例&#xff0c;展示如何加载图片&#xff0c;调整其大小&#xff0c;然后直接使用它&#xff08;例如显示或…

字母求和__GESP C++ 三级真题(2024年3月)

字母求和 小杨同学发明了一种新型密码&#xff0c;对于每一个小写英文字母&#xff0c;该小写字母代表了一个正整数&#xff0c;即该字母在字母顺序中的位置&#xff0c;例如字母a代表了正整数 1&#xff0c;字母b代表了正整数 2; 对于每一个大写英文字母&#xff0c;该大写…

实现点击Button,改变背景颜色(多个按钮互斥显示)

一 功能描述 在界面中&#xff0c;有一组button&#xff0c;现在需要实现下面功能&#xff1a;点击其中一个&#xff0c;改变被点击button的背景颜色。当点击下一个之后&#xff0c;之前点击过的按钮背景颜色还原&#xff0c;当前被点击的button背景色又被改变。效果如下图&…

【JavaEE】多线程代码案例(2)

&#x1f38f;&#x1f38f;&#x1f38f;个人主页&#x1f38f;&#x1f38f;&#x1f38f; &#x1f38f;&#x1f38f;&#x1f38f;JavaEE专栏&#x1f38f;&#x1f38f;&#x1f38f; &#x1f38f;&#x1f38f;&#x1f38f;上一篇文章&#xff1a;多线程代码案例(1)&a…

女性经济崛起,天润融通用客户感知挖掘市场潜力

每逢一年一度的国际妇女节&#xff0c;“女性”话题都会被郑重地讨论。 从消费市场上来说&#xff0c;最近几年女性群体正在拥有越来越大的影响力&#xff0c;甚至出现了“她经济”这样的专属词汇在最近几年被市场反复讨论。 毫无疑问&#xff0c;女性消费群体的崛起已经成为…

监控平台—Zabbix对接grafana

目录 一、安装grafana并启动 二.浏览器访问 三、导入zabbix数据&#xff0c;对接grafana 四.如何导入模版 一、安装grafana并启动 添加一台服务器192.168.80.102 初始化操作 systemctl disable --now firewalld setenforce 0 vim /etc/selinux/config SELINUXdisabled cd /…

一文解开关于UWB定位技术的认识误区

作为一项新兴技术产业&#xff0c;UWB定位技术具有无限发展潜力。尤其是在TB行业应用中&#xff0c;UWB定位部分在项目的产值占比为10%-20%之间&#xff0c;这便意味着&#xff0c;UWB定位市场可以撬动其本身市场产值的5-10倍。 然而&#xff0c;伴随着UWB定位技术的迅速发展&a…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【通用密钥库基础概念】

通用密钥库基础概念 在使用通用密钥库完成应用开发前&#xff0c;开发者需要了解以下相关概念&#xff0c;以下概念将贯穿整个开发过程。 可信执行环境&#xff08;TEE&#xff09; 可信执行环境&#xff08;Trusted Execution Environment&#xff09;&#xff0c;简称TEE&…

关于Python中的异常处理以及示例

在Python中&#xff0c;异常处理是一种非常重要的编程结构&#xff0c;它允许程序优雅地处理运行时错误&#xff0c;避免程序因为未处理的异常而崩溃。try-except-else-finally语句块是Python中用于异常处理的主要机制。 try-except-else-finally 的工作原理 try 块&#xff…

论文解读StyleGAN系列——StyleGANv1

论文&#xff1a;A Style-Based Generator Architecture for Generative Adversarial Networks&#xff08;2018.12&#xff09; 作者&#xff1a;Tero Karras, Samuli Laine, Timo Aila 链接&#xff1a;https://arxiv.org/abs/1812.04948 代码&#xff1a;https://github.com…

Movable antenna 早期研究

原英文论文名字Historical Review of Fluid Antenna and Movable Antenna 最近&#xff0c;无线通信研究界对“流体天线”和“可移动天线”两种新兴天线技术的发展引起了极大的关注&#xff0c;这两种技术因其前所未有的灵活性和可重构性而极大地提高了无线应用中的系统性能。…