代码随想录刷题第四十三天| 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

代码随想录刷题第四十三天

今天为三道0-1背包问题的变种, 分别有三个小问题

  1. 给定一个容量为j的背包,尽可能装下物品,找到能装下物品的最大价值
    • dp[i][j] = max(dp[i-1][j], dp[i-1][j-nums[i]]+nums[i])
  2. 给定一个容量为j的背包,找到有多少种方法能够装满背包
    • dp[i][j] += dp[i-1][j-nums[i]]
    • 将左上角dp[0][0]初始化为1, 从这一种方法开始往上累加
  3. 给定一个容量为j的背包,找到背包最后装了多少个物品
    • dp[i][j] = max(dp[i-1][j], dp[i-1][j-nums[i]]+1)

最后一块石头的重量II (LC 1049)

题目思路:

在这里插入图片描述

代码实现:

class Solution:
    def lastStoneWeightII(self, stones: List[int]) -> int:
        allsum = sum(stones)
        target = allsum//2

        dp = [[0 for _ in range(target+1)] for _ in range(len(stones))]

        if stones[0] <= target:
            for j in range(stones[0], target+1):
                dp[0][j] = stones[0]

        for i in range(1, len(stones)):
            for j in range (1, target+1):
                if stones[i] > j:
                    dp[i][j] = dp[i-1][j]
                else:
                    dp[i][j] = max(dp[i-1][j], dp[i-1][j-stones[i]]+stones[i])
        
        return allsum-dp[len(stones)-1][target]*2

目标和 (LC 494)

题目思路:

在这里插入图片描述

代码实现:

class Solution:
    def findTargetSumWays(self, nums: List[int], target: int) -> int:
        allsum =sum(nums)
        if (allsum+target)%2==1:
            return 0
        if allsum < abs(target):
            return 0     
        addtarget = (allsum+target)//2

        dp = [[0 for i in range(addtarget+1)] for _ in range(len(nums))]

        if nums[0]<=addtarget:
            dp[0][nums[0]] = 1 

        if nums[0]!=0:
            dp[0][0] = 1
        else:
            dp[0][0] = 2              
        
        for i in range(1, len(nums)):
            for j in range(addtarget+1):
                dp[i][j] = dp[i - 1][j]  # 不选取当前元素
                if nums[i] <= j:
                    dp[i][j] += dp[i-1][j-nums[i]]

        print(dp)
        
        return dp[len(nums)-1][addtarget]

一和零 (LC 474)

题目思路:

在这里插入图片描述

代码实现:

三维dp,会超时

class Solution:
    def findMaxForm(self, strs: List[str], m: int, n: int) -> int:
        dp = [[[0 for _ in range(n+1)] for _ in range(m+1) ] for _ in range(len(strs))]

        zeros, ones = self.count_zeros(strs[0])
        if zeros<=m and ones<=n:
            for j in range(zeros, m+1):
                for k in range(ones, n+1):
                    dp[0][j][k] = 1           
        
        for i in range(1, len(strs)):
            for j in range(m+1):
                for k in range(n+1):
                    zeros, ones = self.count_zeros(strs[i])
                    dp[i][j][k] = dp[i-1][j][k]  # 不选取当前元素
                    if zeros<=j and ones<=k:
                        dp[i][j][k] = max(dp[i-1][j][k], dp[i-1][j-zeros][k-ones]+1)

        print(dp)
        
        return dp[len(strs)-1][m][n]

    def count_zeros(self, input_string):
        count = 0
        for char in input_string:
            if char == '0':
                count += 1
        return count, len(input_string)-count

二维dp

class Solution:
    def findMaxForm(self, strs: List[str], m: int, n: int) -> int:
        dp = [[0 for _ in range(n+1)] for _ in range(m+1)]
        
        for i in range(len(strs)):
            for j in range(m, -1, -1):
                for k in range(n, -1, -1):
                    zeros, ones = self.count_zeros(strs[i])
                    dp[j][k] = dp[j][k]  # 不选取当前元素
                    if zeros<=j and ones<=k:
                        dp[j][k] = max(dp[j][k], dp[j-zeros][k-ones]+1)
        
        return dp[m][n]

    def count_zeros(self, input_string):
        count = 0
        for char in input_string:
            if char == '0':
                count += 1
        return count, len(input_string)-count

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在docker中搭建部署clickhouse

因需要给网关日志拉取并存储供数据分析师分析&#xff0c;由于几十个项目的网关请求数量很大&#xff0c;放在mysql不合适&#xff0c;MongoDB不适合分析&#xff0c;于是准备存放在clickhouse&#xff0c;clickhouse对于读写支持也比较友好&#xff0c;说干就干 1、在服务器中…

Docker查看镜像的Dockerfile

前言 在使用Docker构建应用程序时&#xff0c;我们可以通过Dockerfile定义应用程序的环境&#xff0c;并将其打包成一个镜像。有时&#xff0c;我们可能需要查看一个已经构建好的镜像的Dockerfile&#xff0c;以了解镜像是如何构建的&#xff0c;或者进行后续的修改和调整。本…

C++中的虚函数

前言 本篇文章讲述C的虚函数 定义 在C语言中&#xff0c;基类将类型相关的函数和派生类不做改变直接继承的函数区分开来。对于有些函数&#xff0c;基类希望派生类各自定义适合自身的版本。那么基类就会将这些函数标记为virtual&#xff0c;这些被标记的函数就是虚函数。 下…

[计算机提升] 创建和管理一般共享文件夹

4.6 创建和管理一般共享文件夹 4.6.1 创建一般共享文件夹 通过创建共享文件夹&#xff0c;可以让多台计算机在同一网络上共享文件和文件夹。这对于团队协作、家庭用户共享文件和资源非常方便。方式如下&#xff1a; 1、选中要共享的文件夹&#xff0c;然后右键属性&#xff0…

软件测试大作业||测试计划+测试用例+性能用例+自动化用例+测试报告

xxx学院 2023—2024 学年度第二学期期末考试 《软件测试》&#xff08;A&#xff09;试题&#xff08;开卷&#xff09; 题目&#xff1a;以某一 web 系统为测试对象&#xff0c;完成以下文档的编写&#xff1a; &#xff08;满分 100 分&#xff09; &#xff08;1&am…

接雨水(Leetcode42)

例题&#xff1a; 题目说了&#xff0c;给定n个宽度为1的柱子&#xff0c;height数组中的每个元素表示每个柱子的高度。 只要柱子之间存在凹槽&#xff0c;就能接住雨水。 在解决这道题目之前&#xff0c;我们先了解一下单调递减栈。&#xff08;由栈底到栈顶逐渐递减&#xff…

项目知识—SSM及之后02

1、resultMap写的Base内容必须保证select都使用上 2、VALUE单个 &#xff0c;VALUES多个 3、一对多&#xff0c;两张表&#xff0c;多的表加外键 比如班级和学生就是一对多&#xff0c;查就是按照学生表去查询 多对多&#xff0c;三张表&#xff0c;关系表加外键 4、数据库…

yolov8实战第五天——yolov8+ffmpeg实时视频流检测并进行实时推流——(推流,保姆教学)

yolov8实战第一天——yolov8部署并训练自己的数据集&#xff08;保姆式教程&#xff09;_yolov8训练自己的数据集-CSDN博客 yolov8实战第三天——yolov8TensorRT部署&#xff08;python推理&#xff09;&#xff08;保姆教学&#xff09;-CSDN博客 今天&#xff0c;我们继续y…

深度解析 Compose 的 Modifier 原理 -- DrawModifier

其实原理性分析的文章&#xff0c;真的很难讲的通俗易懂&#xff0c;讲的简单了就没必要写了&#xff0c;讲的繁琐难懂往往大家也不乐意看&#xff0c;所以只能尽量想办法&#xff0c;找个好的角度&#xff08;比如从 Demo 代码示例出发&#xff09;慢慢带着大家去钻源码&#…

Linux查看物理CPU个数、核数、逻辑CPU个数

文章目录 总核数总逻辑CPU数查看物理CPU个数查看每个物理CPU中core的个数(即核数)查看逻辑CPU的个数 总核数 总核数 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 总逻辑CPU数 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 查看物理CPU个数 cat /proc/cpuinfo| grep “…

湖南大学-数据库系统-2015期末考试解析

【写在前面】 这是2015年的卷子&#xff0c;应该是我能找到最老的一张了&#xff0c;遂做了并与同学校对了答案。答案仅供参考。这张难度不大&#xff0c;都是基础题。 一.单选题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09; 1、在数据库中&#xff0c;下列说法&a…

企业工商基本信息API:一站式掌握企业核心数据

引言 在当今快速发展的商业环境中&#xff0c;了解企业的基本信息是每个业务决策者的基本需求。然而&#xff0c;手动收集和处理这些信息既耗时又容易出错。企业工商基本信息查询API的出现&#xff0c;为企业提供了一个高效、准确的一站式解决方案。 企业工商基本信息API 企…

win10录音功能大盘点,帮你轻松搞定录音

“有人知道win10系统怎么录音吗&#xff1f;在网上找到了一段英语听力&#xff0c;本来打算保存下来&#xff0c;但是发现不能下载&#xff0c;我也不会使用电脑录音&#xff0c;真的很头疼&#xff0c;有人能帮帮我吗。” 在Windows 10系统中&#xff0c;录音是一项常见但往往…

PPT插件-布局参考-增加便携尺寸功能

PPT自带的尺寸为很久的尺寸&#xff0c;很多尺寸不常用&#xff0c;这里增加一些画册尺寸&#xff0c;用于PPT排版设计。 软件介绍 PPT大珩助手是一款全新设计的Office PPT插件&#xff0c;它是一款功能强大且实用的PPT辅助工具&#xff0c;支持Wps Word和Office Word&#x…

Python——字符串的拼接

print("某某程序员" "月薪过万") name "吱昂张程序员" address "**大学" tel 19819208830 print("我是:"name"我的地址在&#xff1a;"address)#通过占位的形式完成字符串换的拼接 name"吱昂张" me…

【项目实战】Cadence工具的使用2

代码覆盖率的收集 双击total&#xff0c;打开imc工具。total 下的文件是代码覆盖率文件 找到DUT模块&#xff01;从图中可以看到代码的覆盖率已经是94.43% 添加exclude文件&#xff0c;注意和Synopsys的后缀不同。 导入.vRefine文件 代码覆盖率为100%。 原因是我们添加了exclu…

VS2022 | 调整适配虚幻5的设置

VS2022 | 调整适配虚幻5的设置

Spring学习 Spring事务控制

7.1.事务介绍 7.1.1.什么是事务&#xff1f; 当你需要一次执行多条SQL语句时&#xff0c;可以使用事务。通俗一点说&#xff0c;如果这几条SQL语句全部执行成功&#xff0c;则才对数据库进行一次更新&#xff0c;如果有一条SQL语句执行失败&#xff0c;则这几条SQL语句全部不…

工业自动化中RFID标签的应用案例

RFID标签是实现RFID数据采集的重要载体&#xff0c;利用RFID标签&#xff0c;可以将所有产品的信息写入标签中&#xff0c;大部分的RFID标签都以不干胶标签的形式使用&#xff0c;只需要在物品包装上贴RFID标签就可以。下面我们就一起来了解一下&#xff0c;工业自动化中RFID标…

编程代码设计GUI界面

前情提要 GUI界面有元件拖动和编程代码两种设计方式&#xff0c;元件拖动比较直观&#xff0c;编程代码更加细致。本来搞了一个包含各种元件的项目&#xff0c;最后发现代码比较长&#xff0c;一下子扔出来对初学者非常不友好&#xff0c;所以我们分开一段一段来添加&#xff…