代码随想录训练营Day 49|力扣139.单词拆分、关于多重背包,你该了解这些!、背包问题总结篇!

1.单词拆分

视频讲解:动态规划之完全背包,你的背包如何装满?| LeetCode:139.单词拆分_哔哩哔哩_bilibili

代码随想录

代码:

class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> wordSet(wordDict.begin(),wordDict.end());// dp数组定义及初始化 dp[j]表示字符串下标从0~j的字符串是否能被所给的单词组成vector<bool> dp(s.size() + 1,false);dp[0] = true;// 递推公式3for(int j = 1; j <= s.size(); j++){for(int i = 0; i < j; i++){// 当dp[i]已经为真,j - i这段长度也为一个单词时,说明dp[j]为真string word = s.substr(i,j - i);if(wordSet.find(word) != wordSet.end() && dp[i]){dp[j] = true;}}}return dp[s.size()];}
};

 思路:

dp数组的含义:dp[j]表示字符串下标从0~j的字符串是否能被所给的单词组成

dp数组的递推公式:当dp[i]已经为真,j - i这段长度也为一个单词时,说明dp[j]为真。即为

if(wordSet.find(word) != wordSet.end() && dp[i] ){dp[j] = true;
}

dp数组的初始化:为了让后面的值都有效,dp[0] = true

dp数组的遍历顺序:这道题不同的单词顺序不同会拼成不同的字符串,因此这是在求排列数。所以要先遍历背包,再遍历物品。

细节:这道题“物品”的处理方式和之前的不一样。我们是把  j - i 看成我们在dp[i]的基础上增加的新的字符,并且判断这个“物品”是不是题上给的单词序列里的。所以,这里的i必须小于j

2.多重背包

代码随想录

代码:

#include <iostream>
#include <vector>
using namespace std;
int main(){int begweight,n;cin >> begweight >> n;vector<int> weight(n,0);vector<int> value(n,0);vector<int> nums(n,0);for(int i = 0; i < n; i++){cin >> weight[i];}for(int i = 0; i < n; i++){cin >> value[i];}for(int i = 0; i < n; i++){cin >> nums[i];}// 定义dp数组及初始化vector<int> dp(begweight + 1,0);// 递推公式2for(int i = 0;i < n; i++){ // 遍历物品for(int j = begweight; j >= weight[i]; j--){// 在01背包的物品上,加上遍历个数for(int k = 1; k <= nums[i] && (j - k * weight[i]) >= 0;k++){//背包所装物品不能超过数量限制,背包要留有足够的空间dp[j] = max(dp[j],dp[j - k * weight[i]] + k * value[i]);}}}cout << dp[begweight] << endl;
}

 思路:

多重背包其实可以把物品摊开来看,这样就转换成了01背包。在01背包的基础上,再加一个循环来改变数量k的值,就好了。

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

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

相关文章

Bev 车道标注方案及复杂车道线解决

文章目录 1. 数据采集方案1.1 传感器方案1.2 数据同步2. 标注方案2.1 标注注意项2.2 4d 标注(时序)2.2.1 4d标签制作2.2.2 时序融合的作用2.2.2.1 时序融合方式2.2.2.2 时序融合难点2.2.2.2 时序实际应用情况3. 复杂车道线解决3.1 split 和merge车道线的解决3.2 大曲率或U形车道…

postman教程-12-保存请求至Collections

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了Postman管理环境的方法&#xff0c;本小节我们讲解一下Postman保存请求至Collections集合的方法。 1、创建Collection 在保存Request请求之前&#xff0c;先创建一个Collection(集合)&#…

java常见api :Math System

一. Math类 1.定义在那个包 java.lang包下 2.作用 (1)是一个帮助我们用于进行数学计算的工具类 (2)私有化构造方法,所有的方法都是静态的 3.常用的方法 &#xff08;1&#xff09;获取绝对值 System.out.println(Math.abs(-88)); 取值范围&#xff1a; -2147483648到21…

Python中如何打开网页

幸好思念无声&#xff0c;可惜思念无声 ——24.6.4 Python打开前端网页 1.导入webbrowser库 用webbrowser.open(传入网址)&#xff0c;打开网页 import webbrowser webbrowser.open("Index.html") 2.用flask框架 from wsgiref.simple_server import make_serve…

什么是电风扇行情?

“电风扇行情” 是一个金融术语&#xff0c;用于描述证券市场中价格上下波动频繁、幅度较大&#xff0c;但总体趋势不明显的市场状况。   其名称来源于电风扇的扇叶在旋转时&#xff0c;风向不断变化的特征&#xff0c;形象地比喻了市场价格频繁变动但没有明确方向的情景。 …

mysql分页查询优化

优化分页中的偏移量 背景和问题 在数据量较大的情况下&#xff0c;使用 LIMIT 偏移量会导致查询效率低下。例如&#xff0c;获取第 101 页的数据&#xff0c;每页 50 条记录时&#xff0c;查询语句如下&#xff1a; SELECT * FROM articles ORDER BY id LIMIT 50000, 50;这种…

代码随想录算法训练营Day25|216.组合总和III、17.电话号码的字母组合

组合总和III 216. 组合总和 III - 力扣&#xff08;LeetCode&#xff09; 思路和昨日的组合题类似&#xff0c;但注意对回溯算法中&#xff0c;收获时的条件需要写对&#xff0c;path的长度要为k的同时&#xff0c;path中元素总和要为n。 class Solution { public:vector<…

A6370超速保护监控器

A6370监控器是AMS 6300 SIS超速保护系统的一部分&#xff0c;并且 与A6371一起安装在19英寸机架中(84HP宽&#xff0c;3RU高) 系统底板。一个AMS 6300 SIS由三个保护监视器(A6370)组成 和一个背板(A6371)。 该系统设计用于涡流传感器、霍尔元件传感器和 磁性(VR)传感器。 传感器…

UI 自动化分布式测试 -Docker Selenium Grid

分布式测试Selenium Grid 对于大型项目或者有大量测试用例的项目,单机的测试环境往往无法快速完成所有测试用例的执行,此时自动化测试执行效率将会成为最大的瓶颈,Selenium Grid 可以通过多机的分布式架构允许测试用例并行运行,大大缩短了测试时间。 Selenium Grid 提供了多…

Android14 WMS-窗口绘制之relayoutWindow流程(一)-Client端

Android14 WMS-窗口添加流程(一)-Client端-CSDN博客 Android14 WMS-窗口添加流程(二)-Server端-CSDN博客 经过上述两个流程后&#xff0c;窗口的信息都已经传入了WMS端。 1. ViewRootImpl#setView 在窗口添加流程(一)中&#xff0c;有这个方法&#xff1a; http://aospxre…

【从零开始部署SAM(Segment Anything Model )大模型 3 Ubuntu20 离线部署 C++】

这里是目录 总览环境配置模型准备Moble SAM onnx模型获取Moble SAM pre onnx模型获取 运行cmakelist 运行结果 总览 相比于使用python离线部署SAM大模型&#xff0c;C要麻烦的多&#xff0c;本篇的部署过程主要基于项目&#xff1a;https://github.com/dinglufe/segment-anyth…

今日增长工具精选 | 三款你不知道但很实用的运营工具

PartnerShare作为一款分销裂变系统&#xff0c;受到国内多数工具类saas企业的青睐&#xff0c;旗下还有产品分享社区&#xff0c;介绍多种实用的工具&#xff0c;林叔从它那里获得灵感&#xff0c;新开了增长工具集合分享&#xff01;希望能帮助更多saas企业增长。 一、Charac…

kettle学习总结(3)

书接上回&#xff0c;数据同步核心流程1&#xff0c;同步aav库表 <?xml version"1.0" encoding"UTF-8"?> <transformation><info><name>sync_aav</name><description /><extended_description /><trans_v…

计算机基础(3)——计算机系统组成

&#x1f497;计算机基础系列文章&#x1f497; &#x1f449;&#x1f340;计算机基础&#xff08;1&#xff09;——计算机的发展史&#x1f340;&#x1f449;&#x1f340;计算机基础&#xff08;2&#xff09;——冯诺依曼体系结构&#x1f340;&#x1f449;&#x1f34…

C++基础 auto 和 decltype的区别

auto关键字 auto 关键字允许编译器根据初始化表达式自动推导出变量的类型。这意味着你不需要显式写出变量的类型&#xff0c;编译器会根据你赋予的初始值来确定类型。这对于复杂类型、模板编程或是避免重复冗长的类型名称尤其有用&#xff0c;可以提高代码的可读性和编写效率。…

sensor曝光时间

一、基本概念 1.曝光时间Te (Time exposure) 曝光时间指一个像素感光的时间&#xff0c;会影响势井中电子的数量&#xff0c;从而影响像素的亮度&#xff0c;通常的单位为ms。 2. 帧率 fps&#xff08;frame per second&#xff09; 帧率值单位时间完全读出图像的帧数&…

【编译原理】LL(1)分析法:C/C++实现

&#x1f516;墨香寄清辞&#xff1a;空谷幽篁风动&#xff0c;梦中仙鹤月明。 辗转千秋豪情在&#xff0c;乘风翱翔志不移。 目录 1. 编译原理之LL(1)分析法概念 1.1 编译原理 1.2 LL(1)分析法 2. LL(1)分析法 2.1 实验目的 2.2 实验要求 2.3 实验内容 2.3.1 实验解决…

Python筑基之旅-字符串(一)

目录 一、字符串 1、字符串的定义 1-1、使用单引号() 1-2、使用双引号(") 1-3、使用三引号(或""") 1-4、原始字符串(rstr或Rstr) 2、字符串的语法 3、获取字符串的属性和方法 4、获取字符串的帮助信息 5、字符串的用法 5-1、capitalize()方法…

通信技术信号源硬件实验

定义 1.RZ码&#xff08;归零码&#xff09; RZ编码也成为归零码&#xff0c;归零码的特性就是在一个周期内&#xff0c;用二进制传输数据位&#xff0c;在数据位脉冲结束后&#xff0c;需要维持一段时间的低电平。 2.NRZ码&#xff08;不归零编码&#xff09; NRZ编码也成为…

哈希表与离散化(题目)

A. 子串判重 题目描述&#xff1a; 给定一个含有 26 个小写英文字母的字符串。有 m 次询问&#xff0c;每次给出 2 个区间&#xff0c;请问这两个区间里的子字符串是否一样&#xff1f; 输入&#xff1a; 第一行输入一个字符串 S 。 第二行一个数字 m&#xff0c;表示 m 次…