代码随想录训练营day46, 单词拆分和多重背包

news2024/11/26 0:29:57

今天就这一道题, 但还是有难度的

单词就是物品, 字符串s就是背包, 单词能否组成字符串s, 就是问物品能不能把背包装满

  1. 确定dp数组含义: 字符串长度为i的话, dp[i]为true, 表示可以拆分, j是分割指针
  2. 确定递推公式: 如果确定dp[j]是true, 且[j , i]这个区间的子串出现在字典里, 那么dp[i]一定是true, 所以递推公式是if([j,i]这个区间的子串出现在字典里 && dp[j]是true), 那么dp[i] = true
  3. 初始化: dp[i]的状态依靠dp[j]是否为true, 所以dp[0]一定要为true
  4. 遍历顺序都可以, 但由于是要求子串, 最好先背包

(细节: 需要用一个hashset来判断单词是否在set中)

 

class Solution {
    public boolean wordBreak(String s, List<String> wordDict) {
        //利用hashset来判断是否contain
        HashSet<String> set = new HashSet<>(wordDict);
        boolean[] dp = new boolean[s.length() + 1];

        //初始化
        dp[0] = true;
        //先遍历背包, 那么就是背包的大小
        for(int i = 1; i <= s.length(); i++){
            //j是分割点, 所以就不用等于i了
            ///如图, j是i前一个, 所以从0开始,不用等于i
            for(int j = 0; j < i; j++){
                //开始判断条件, dp[j]是否合法&&是否在set里
                if(dp[j] && set.contains(s.substring(j, i))){
                    dp[i] = true;
                }
            }
        }
        //i是字符串的长度, 所以这里一样
        return dp[s.length()];
    }
}

多重背包

有n种物品和一个容量为v的背包, 第i中物品最多有MJ件可用, 没见耗费的空间是Ci, 价值是Wi

(其实和01背包很像, 把这里的m件摊开来就是01背包了)

就是在01背包的基础上多加个for循环遍历物品个数

public void testMultiPack2(){
    // 版本二:改变遍历个数
    int[] weight = new int[] {1, 3, 4};
    int[] value = new int[] {15, 20, 30};
    int[] nums = new int[] {2, 3, 2};
    int bagWeight = 10;

    int[] dp = new int[bagWeight + 1];
    for(int i = 0; i < weight.length; i++) { // 遍历物品
        for(int j = bagWeight; j >= weight[i]; j--) { // 遍历背包容量
            // 以上为01背包,然后加一个遍历个数
            for (int k = 1; k <= nums[i] && (j - k * weight[i]) >= 0; k++) { // 遍历个数
                dp[j] = Math.max(dp[j], dp[j - k * weight[i]] + k * value[i]);
            }
            System.out.println(Arrays.toString(dp));
        }
    }
}

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

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

相关文章

案例-Shell定时采集数据到HDFS

1. 准备工作 创建日志文件存放的目录 /export/data/logs/log&#xff0c;执行命令&#xff1a;mkdir -p /export/data/logs/log 创建待上传文件存放的目录/export/data/logs/toupload&#xff0c;执行命令&#xff1a;mkdir -p /export/data/logs/toupload 查看创建的目录树结…

FSC在全球范围内增强品牌相关度,促进公众理解

【FSC在全球范围内增强品牌相关度&#xff0c;促进公众理解】 FSC品牌标识 “森林与共&#xff0c;生生不息”将逐渐精简&#xff0c;同时覆盖更多语种。 加深消费者对FSC的理解 近年来&#xff0c;FSC品牌认知度不断提高&#xff0c;超过半数的全球消费者认可并信任“小树”标…

为什么劝你要学习Golang以及GO语言(Go语言知识普及)

Go语言 一、 Go语言的由来 Go语言亦叫Golang语言&#xff0c;是由谷歌Goggle公司推出。 传统的语言比如c&#xff0c;大家花费太多时间来学习如何使用这门语言&#xff0c;而不是如何更好的表达写作者的思想&#xff0c;同时编译 花费的时间实在太长&#xff0c;对于编写-编译…

C语言只推荐这1本宝藏书,你读过吗?

入门的大家随便搜搜学起来都不会出错&#xff0c;进阶的推荐1本豆瓣评分9.1&#xff0c;这本经典之作真正地让人搞懂了烦人的指针。 指针为什么如此重要&#xff1f;C语言圈内有一句经典的自嘲&#xff1a;C语言就只有指针可以用了。如果你干掉struct、干掉union、干掉数组、甚…

html在线阅读小说网页制作模板 小说书籍网页设计 大学生静态HTML网页源码 dreamweaver网页作业 简单网页课程成品

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

管道通信: 有名管道 无名管道,行业大牛通通教会你

管道是一种最古老也是最基本的系统IPC形式&#xff0c;管道就像现实中的水管&#xff0c;水就像数据&#xff0c;它是消息传递的一种特殊方式&#xff0c;管道机制必须提供三方面的协调能力&#xff1a;互斥、同步和确定对方的存在。在Linux中是一种使用非常频繁的通信机制。从…

链表剖析及自己手撸“单链表“实现基本操作(初始化、增、删、改等)

一. 基础 1. 前言 链式存储结构&#xff0c;又叫链表&#xff0c;逻辑上相邻&#xff0c;但是物理位置可以不相邻&#xff0c;因此对链表进行插入和删除时不需要移动数据元素&#xff0c;但是存取数据的效率却很低&#xff0c;分为三类&#xff1a; (1).单(向)链表&#xff1…

【iconfont图标】vue引入并使用阿里巴巴iconfont图标流程

前言 为什么要使用阿里图标库&#xff1a; 图标现在是很多地方都会用到的 一般我使用的时候都是直接在ui库中比如elementul自带的一些 有时候哪怕是感觉图标不是非常适合也是用的elementul图标&#xff0c;主要原因是懒 因为能直接复制的&#xff0c;就懒得再去阿里图标库下载…

如何让Java项目兼容更多的客户端设备(一)

如何让Java项目兼容更多的客户端设备&#xff08;一&#xff09; 引入 HTTP访问是无状态的&#xff0c;&#xff08;服务器不知道是不是你访问的&#xff09;所以我们不知道每次登录的是谁 如果想实现每次登录不用重复登录&#xff0c;最简单的就是让浏览器记住用户名和密码…

球面距离计算方式(杭州到各城市的球面距离计算球面距离)

1&#xff09;杭州到各城市的球面距离 1、数据来源&#xff1a;自主计算 2、时间跨度&#xff1a;至今 3、区域范围&#xff1a;368个城市 4、指标说明&#xff1a;利用城市经纬度&#xff0c;计算球面距离 部分数据如下&#xff1a; &#xff08;2&#xff09;计算两个点之…

Sentinel配置持久化到Nacos实现流控熔断

控制台 jar 下载&#xff1a;github.com/alibaba/Sen… 启动参数 # 将控制台自身接入到sentinel nohup java -jar -Dproject.namesentinel-dashboard -Dcsp.sentinel.dashboard.serverlocalhost:8181 sentinel-dashboard-1.8.5.jar --server.port8181 &> sentinel.log …

单商户商城系统功能拆解38—分销应用—分销订单

c 下面以likeshop单商户高级版 商城系统为例进行功能拆解&#xff0c;likeshop单商户高级版商城系统可以实现快速部署&#xff0c;文档齐全&#xff0c;代码全开源&#xff0c;无加密&#xff0c;极易二次开发&#xff0c;助力企业以极低的成本上线电商业务。并且likeshop以其…

Java项目模块占用CPU过高问题分析

背景&#xff1a;近期一个模块&#xff08;暂且称为A&#xff09;新上了一个需求&#xff0c;改动了些代码&#xff0c;在测试环境部署之后&#xff0c;该模块系统CPU使用率动不动就飙升到90%&#xff0c;甚至200%&#xff0c;严重影像其他业务执行。排查过程 1.使用top查看当…

【LeetCode】813. 最大平均值和的分组

题目描述 给定数组 nums 和一个整数 k 。我们将给定的数组 nums 分成 最多 k 个相邻的非空子数组 。 分数 由每个子数组内的平均值的总和构成。 注意我们必须使用 nums 数组中的每一个数进行分组&#xff0c;并且分数不一定需要是整数。 返回我们所能得到的最大 分数 是多少。答…

eclipse中创建的Maven Module和Maven Project及其间区别

eclipse中创建Maven Module和Maven Project及其间的区别Maven Module和Maven ProjectProject和Module的关系及用法Maven Module工程必须有父工程Maven Module和Maven Project Maven Project可以理解为父工程&#xff0c;是最上级的项目&#xff0c;一般没有其他parent项目。是一…

Word控件Spire.Doc 【图像形状】教程(6): 如何在 C#、VB.NET 的 Word 文档中插入形状和形状组

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

天河超算,安装Hypre

1)下载&#xff0c;解压 略 得到目录&#xff1a;hypre-master 源文件在src目录下面 src包含如下目录&#xff1a; 2&#xff09;cmake编译 版本比较新 HYPRE_RELEASE_NAME hypre HYPRE_RELEASE_VERSION 2.26.0 HYPRE_RELEASE_DATE 2022/10/14 HYPRE_RELEASE_TIM…

CT正投影算法归纳

一、CT重建基本原理 CT 系统成像基本模型可以描述成&#xff1a;   f为待重建图像&#xff0c;P为投影数据&#xff0c;W为系统矩阵&#xff0c;其中&#xff0c;投影矩阵反映探测器上的投影与重建物体的关系&#xff0c;其模型刻画对于重建速度和精度有着重要影响。 二、…

Java:多线程基础(一)-创建线程的两种方式

目录 线程与进程 Thread类 创建线程的两种方式 方式1&#xff1a;继承Thread类 方式2&#xff1a;实现Runnable接口 * 方式2延伸&#xff1a;实现Callable接口 Callable接口 Futuretask类 返回线程计算结果&#xff1a;get() Callable&#xff1a;创建子线程…