当前位置: 首页 > news >正文

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

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

一、力扣139.单词拆分

题目链接:
思路:确定dp数组,dp[i]为true表示从0到i切分的字串都在字典中出现过。
确定递推公式,dp[i] 为true要求 s[j, i] 在字典中出现,且dp[j]为true,即可设置dp[i]=true
初始化,dp[0]=true,这个设置为true是为了让后面依赖前面的状态。
遍历时注意,字典中的单词可以在s的前面出现也可以在后面出现,这就是排列问题,单组合物品在前面出现就不会在后面出现。另外注意substring是左闭右开。

class Solution {public boolean wordBreak(String s, List<String> wordDict) {HashSet<String> set = new HashSet<>(wordDict);boolean[] dp = new boolean[s.length()+1];dp[0] = true;for (int i = 1; i <= s.length(); i++) {for (int j = 0; j < i && !dp[i]; j++) {if (set.contains(s.substring(j, i)) && dp[j]) {dp[i] = true;}}}return dp[s.length()];}
}

二、背包问题总结

背包五部曲:
1、确定dp数组(dp table)以及下标的含义
2、确定递推公式
3、dp数组如何初始化
4、确定遍历顺序
5、举例推导dp数组

背包递推公式
问能否能装满背包(或者最多装多少):dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);
问装满背包有几种方法: dp[j] += dp[j - nums[i]]
问背包装满最大价值: dp[j] = max(dp[j], dp[j - weight[me]] + value[me]);
问装满背包所有物品的最小个数: dp[j] = min(dp[j - coins[me]] + 1, dp[j]);

遍历顺序
01背包
二维数组的01背包,先遍历物品还是先遍历背包都是可以的,且第二层for循环是从小到大遍历。
一维dp数组的01背包,只能先遍历物品再遍历背包容量,且第二层for循环是从大到小遍历。

完全背包

一维dp数组的完全背包,先遍历物品还是先遍历背包都是可以的,且第二层for循环是从小到大遍历。

如果求组合数就是外层for循环遍历物品,内层for遍历背包。

如果求排列数就是外层for遍历背包,内层for循环遍历物品。

如果求最小数,那么两层for循环的先后顺序就无所谓了

http://www.lryc.cn/news/107351.html

相关文章:

  • 【机器学习】西瓜书习题3.3Python编程实现对数几率回归
  • Blazor前后端框架Known-V1.2.9
  • 【3D捏脸功能实现】
  • Kafka的零拷贝
  • 如何使用Python进行数据分析?
  • 概率论与数理统计复习总结3
  • PHP正则绕过解析
  • Hive巡检脚本
  • 【状态估计】基于UKF法、AUKF法的电力系统三相状态估计研究(Matlab代码实现)
  • webpack复习
  • 开始学习 Kafka,一文掌握基本概念|Kafka 系列 一
  • Couldn‘t lock the file :/tmp/bbc-filesystem-base_syscache_service
  • vscode 通过mongoose 连接mongodb atlas
  • 记录 Vue3 + Ts 类型使用
  • 主从同步带来的业务问题
  • 主动带宽控制工具
  • 数据采集的方法有哪些?
  • linux重新学习-纪录篇
  • 为机器人装“大脑” 谷歌发布RT-2大模型
  • JavaEE 面试常见问题
  • 06 HTTP(下)
  • clickhouse调研报告2
  • TensorRT学习笔记--基于TensorRT部署YoloV3, YoloV5和YoloV8
  • 原型链污染,nodejs逃逸例子
  • nlohmann::json 中文乱码解决方案
  • IDEA中maven项目失效,pom.xml文件橙色/橘色
  • 【雕爷学编程】MicroPython动手做(28)——物联网之Yeelight 2
  • IntelliJ IDEA 2023.2社区版插件汇总
  • Sheel编写关于mysqldump实现分库分表备份
  • Rust的入门篇(上)