代码随想录算法训练营第46天| 139.单词拆分、背包问题总结

139.单词拆分

完成

思路:

本题可以用背包问题的思路解决,单词是物品,字符串是背包,要求物品能否把背包装满。
dp[j] 字符串长度为j时,能否拆分为一个或多个在字典中出现的单词。
递推公式为:if([i, j] 这个区间的子串出现在字典里 && dp[i]是true) 那么 dp[j] = true
由于本题对装满背包是有顺序要求的,所以是求排列数,要先遍历背包,再遍历物品 。

代码

class Solution {public boolean wordBreak(String s, List<String> wordDict) {// s是背包,wordDict是物品int bagSize = s.length();// dp[j] 字符串长度为i时,能否装满物品boolean[] dp = new boolean[bagSize+1];dp[0] = true; // 遍历背包for (int j = 1; j <= bagSize; j++) {// 遍历物品,这里的思路是从字符串里截取字符当成物品,再去判断该物品是否存在for (int i = 0; i < j; i++) {if(wordDict.contains(s.substring(i, j)) && dp[i]){dp[j] = true;}}}return dp[bagSize];}
}

背包问题总结

关于背包问题,01背包和完全背包是重点,其他的背包问题了解即可。
背包问题
在动态规划五部曲中,递推公式和遍历顺序在背包问题中有规律和代表性。

递推公式

问能否能装满背包(或者最多装多少):dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]); ,对应题目如下:

  • 动态规划:416.分割等和子集
  • 动态规划:1049.最后一块石头的重量 II

问装满背包有几种方法:dp[j] += dp[j - nums[i]] ,对应题目如下:

  • 动态规划:494.目标和
  • 动态规划:518. 零钱兑换 II
  • 动态规划:377.组合总和Ⅳ
  • 动态规划:70. 爬楼梯进阶版(完全背包)

问背包装满最大价值:dp[j] = max(dp[j], dp[j - weight[i]] + value[i]); ,对应题目如下:

  • 动态规划:474.一和零

问装满背包所有物品的最小个数:dp[j] = min(dp[j - coins[i]] + 1, dp[j]); ,对应题目如下:

  • 动态规划:322.零钱兑换
  • 动态规划:279.完全平方数

遍历顺序

对于一维的dp数组,01背包问题要先遍历物品再遍历背包,并且遍历背包时要逆序。
对于完全背包,遍历背包时需要正序,求组合数时先遍历物品,求排列数时先遍历背包。

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

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

相关文章

【Java文件报错】Cannot resolve symbol ‘println‘ 【及解决】

一、问题描述 在Java源代码文件中&#xff0c;使用 System.out.println() 语句进行输出&#xff0c;编译器提示“Cannot resolve symbol ‘println’&#xff08;无法解释关键字&#xff09;”, println飘红。报错代码及报错截图如下所示。 import java.io.*;public class St…

Leetcode560. 和为 K 的子数组 -hot100

题目&#xff1a; 代码(首刷看解析 2024年3月2日&#xff09;&#xff1a; class Solution { public:int subarraySum(vector<int>& nums, int k) {// 前缀和 遍历int res 0;unordered_map<int, int> sumPre;int sum 0;// 关键&#xff1a;初始化sumPre[0]…

特征融合篇 | YOLOv8 引入通用高效层聚合网络 GELAN | YOLOv9 新模块

今天的深度学习方法专注于如何设计最合适的目标函数,以使模型的预测结果最接近真实情况。同时,必须设计一个合适的架构,以便为预测提供足够的信息。现有方法忽视了一个事实,即当输入数据经过逐层特征提取和空间转换时,会丢失大量信息。本文将深入探讨数据通过深度网络传输…

nn.Linear() 使用提醒

原本以为它是和nn.Conv2d()一样&#xff0c;就看第二个维度的数值&#xff0c;今天才知道&#xff0c;它是只看最后一个维度的数值&#xff01;&#xff01;&#xff01; 例子1 Descripttion: Result: Author: Philo Date: 2024-02-27 14:33:50 LastEditors: Philo LastEditT…

Windows命令行工具和PowerShell介绍

Windows命令行工具和PowerShell是两种不同的文本界面命令解释器&#xff0c;它们在Windows操作系统中用于执行各种操作和管理任务。虽然它们都可以用于执行命令和脚本&#xff0c;但它们之间存在着一些区别和特点。 1. Windows命令行工具&#xff08;Cmd.exe&#xff09; …

xxl-job--01--简介

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.xxl-job1. 1 发展历史1.2 XXL-JOB的系统架构1.3 xxl-job与其他框架对比 2. XXL-JOB的使用2.1 准备工作- 配置调度中心XXL-JOB的数据表 2.2 配置执行器1 引入依赖包…

2023,九章云极DataCanvas的澎湃时刻

大模型和AIGC成就了2023。九章云极DataCanvas公司的2023充满生命力&#xff0c;是人工智能基础软件创新浓度最高的一年&#xff0c;也是价值释放最具想象力的一年。 人工智能新时代的热潮席卷而来&#xff0c;九章云极DataCanvas公司以过硬的AI技术响应时代&#xff0c;冲锋智…

Datawhale【Sora原理与技术实战】| 学习笔记

目录 一. Sora能力二. Sora训练流程1. Visusal encoder2. Diffusion Transformer3. Transformer Decoder 一. Sora能力 长视频&#xff1a;最大可支持60s高清视频生成保持人物与场景高度统一视频融合能力强同一场景多角度/多镜头涌现&#xff1a;随着运动镜头的变化&#xff0…

中央处理器CPU中的技术

一、 知识加油站 1. cpu 指令的执行过程 取指&#xff1a;cpu 获取 程序计数器 中存放的指令地址。读取内存中此地址对应指令并存入指令寄存器译码&#xff1a;指令译码器&#xff0c;解析指令运行&#xff1a;算数逻辑单元计算回写&#xff1a;将执行结果写入对应位置 二. …

Julia语言中的位运算符、赋值运算符、算术运算符

算术运算符 # 使用基本的赋值运算符 a 10 println("a 的初始值是: $a") # 使用加法赋值运算符 a 5 println("a 加上 5 后的值是: $a") # 使用减法赋值运算符 - a - 3 println("a 减去 3 后的值是: $a") # 使用乘法赋值运算符…

spring框架Bean的作用域?对需要保持会话状态的bean应使用prototype作用域?为啥?

当一个bean被定义为"prototype"作用域时&#xff0c;每次请求该bean时都会创建一个新的实例&#xff0c;而不是像"singleton"作用域那样共享同一个实例。 对于需要保持会话状态的bean&#xff0c;如果使用"singleton"作用域&#xff0c;会导致所…

Pycharm的下载安装与汉化

一.下载安装包 1.接下来按照步骤来就行 2.然后就能在桌面上找到打开了 3.先建立一个文件夹 二.Pycharm的汉化