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

news2024/9/28 17:26:34

139.单词拆分 ★

文档讲解 : 代码随想录 - 139.单词拆分
状态:再次回顾。(★:需要多次回顾并重点回顾)


本题其实不套完全背包思路来理解反而更简单易懂一点。


动态规划五部曲:

  1. 确定dp数组(dp table)以及下标的含义
    dp[i]的定义为:字符串长度为i的话,dp[i]true,表示可以拆分为一个或多个在字典中出现的单词。

  2. 确定递推公式

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

    如果确定dp[j]true,且 [j, i] 这个区间的子串出现在字典里,那么dp[i]一定是true( j < i )
    所以递推公式是 if ([j, i] 这个区间的子串出现在字典里 && dp[j]是true) 那么 dp[i] = true

  3. dp数组如何初始化
    dp[0] = true ;

  4. 确定遍历顺序
    完全背包思路: 求排列,先遍历背包,再遍历物品。(不可以换顺序!)
    先确定想要确认的字符串的终止位置i,再确定起始位置j

  5. 举例推导dp数组:
    以输入: s = "leetcode", wordDict = ["leet", "code"]为例,dp状态如图:
    dp数组

本题代码:

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        unordered_set<string> wordSet(wordDict.begin(), wordDict.end());
        vector<bool> dp(s.size() + 1, false);
        dp[0] = true;
        for (int i = 1; i <= s.size(); i++) {   // 遍历背包
            for (int j = 0; j < i; j++) {       // 遍历物品
                string word = s.substr(j, i - j); //substr(起始位置,截取的个数)
                if (wordSet.find(word) != wordSet.end() && dp[j]) {
                    dp[i] = true;
                }
            }
        }
        return dp[s.size()];
    }
};
  • 时间复杂度: O ( n 3 ) O(n^3) O(n3),因为substr返回子串的副本是O(n)的复杂度(这里的nsubstring的长度)
  • 空间复杂度: O ( n ) O(n) O(n)

多重背包

文档讲解 : 代码随想录 - 多重背包
状态:再次回顾。

多重背包

N种物品和一个容量为V 的背包。第i种物品最多有Mi件可用,每件耗费的空间是Ci ,价值是Wi 。求解将哪些物品装入背包可使这些物品的耗费的空间 总和不超过背包容量,且价值总和最大。

每件物品最多有Mi件可用,把Mi件摊开,其实就是一个01背包问题了。

代码:

void test_multi_pack() {
    vector<int> weight = {1, 3, 4};
    vector<int> value = {15, 20, 30};
    vector<int> nums = {2, 3, 2};
    int bagWeight = 10;
    for (int i = 0; i < nums.size(); i++) {
        while (nums[i] > 1) { // nums[i]保留到1,把其他物品都展开
            weight.push_back(weight[i]);
            value.push_back(value[i]);
            nums[i]--;
        }
    }

    vector<int> dp(bagWeight + 1, 0);
    for(int i = 0; i < weight.size(); i++) { // 遍历物品
        for(int j = bagWeight; j >= weight[i]; j--) { // 遍历背包容量
            dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
        }
        for (int j = 0; j <= bagWeight; j++) {
            cout << dp[j] << " ";
        }
        cout << endl;
    }
    cout << dp[bagWeight] << endl;

}
int main() {
    test_multi_pack();
}
  • 时间复杂度: O ( m × n × k ) O(m × n × k) O(m×n×k)m:物品种类个数,n:背包容量,k:单类物品数量

背包问题总结

文档讲解 : 代码随想录 - 背包问题总结
状态:再次回顾。

总结

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

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

相关文章

基于Red Hat Enterprise Linux 7操作系统的PostgresSql15的备份恢复(实践笔记)

零、前言 本文是基于阿里云ECS服务器进行的实践操作&#xff0c;操作系统版本&#xff1a;Red Hat Enterprise Linux 7 PG数据库版本&#xff1a;PostgresSql 15 PG安装方式&#xff1a;yum 由于本人新接触pg数据&#xff0c;本次也是出于好奇&#xff0c;就对pg数据库的pg_du…

二级MySQL(八)——删除表格数据

1、删除特定的数据记录 DELETE FROM tb_student WHERE studentName 黄涛; 删除前&#xff1a; 删除后&#xff1a; 2、带子查询的删除 DELETE FROM tb_student WHERE studentNo (SELECT studentNo FROM tb_student_copy WHERE studentName 孙新); 删除前&#xff1a; 删…

西北大学计算机考研844高分经验分享

西北大学计算机考研844经验分享 个人介绍 ​ 本人是西北大学22级软件工程研究生&#xff0c;考研专业课129分&#xff0c;过去一年里在各大辅导机构任职&#xff0c;辅导考研学生专业课844&#xff0c;辅导总时长达288小时&#xff0c;帮助多名学生专业课高分上岸。 前情回顾…

C++实现客户端/服务端通信(一)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 C实现客户端/服务端通信&#xff08;一&#xff09; 网络编程的基本概念1. 客户端/服务器通信模型&#xff1a;2. socket函数&#xff1a;3. 主机字节序和网络字节序&#xf…

Docker容器学习:搭建自己专属的LAMP环境

目录 编写Dockerfile 1.文件内容需求&#xff1a; 2.值得注意的是centos6官方源已下线&#xff0c;所以需要切换centos-vault源&#xff01; 3.Dockerfile内容 4.进入到 lamp 开始构建镜像 推送镜像到私有仓库 1.把要上传的镜像打上合适的标签 2.登录harbor仓库 3.上传镜…

InDesign软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 InDesign是一款专业的页面设计和布局软件&#xff0c;主要用于印刷和数字出版领域。它是由Adobe公司开发的一款基于文档的排版工具&#xff0c;与Adobe Acrobat、Adobe Illustrator等软件有着相似的用户界面和功能。以下是InDes…

Leetcode 1812。判断国际象棋棋盘中一个格子的颜色

国际棋盘问题&#xff1a; 给你一个坐标 coordinates &#xff0c;它是一个字符串&#xff0c;表示国际象棋棋盘中一个格子的坐标。下图是国际象棋棋盘示意图。 如果所给格子的颜色是白色&#xff0c;请你返回 true&#xff0c;如果是黑色&#xff0c;请返回 false 。 给定坐标…

IDEA软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 IntelliJ IDEA是一款流行的Java集成开发环境&#xff08;IDE&#xff09;&#xff0c;由捷克软件开发公司JetBrains开发。它专为Java开发人员设计&#xff0c;提供了许多高级功能和工具&#xff0c;使得开发人员能够更高效地编写…

最新域名和子域名信息收集技术

域名信息收集 1&#xff0e;WHOIS查询 WHOIS是一个标准的互联网协议&#xff0c;可用于收集网络注册信息、注册域名﹑IP地址等信息。简单来说&#xff0c;WHOIS就是一个用于查询域名是否已被注册及注册域名详细信息的数据库&#xff08;如域名所有人、域名注册商&#xff09;…

Python如何获取用户输入

获取用户输入的方法 在编程中&#xff0c;获取用户输入是一项常见任务&#xff0c;Python提供了多种方法来实现这一目标。让我们一起来看看这些方法。 使用input()函数获取用户输入 Python内置函数input()可以用来获取用户的输入。当程序运行到input()函数时&#xff0c;程序…

【滑动窗口】leetcode1658:将x减到0的最小操作数

目录 一.题目描述 二.思路分析 三.代码编写 一.题目描述 将x减到0的最小操作数 题目要求我们在数组的两端不断地取值&#xff0c;使得取出的数之和等于x&#xff0c;问我们最少需要取几次。 也就是说&#xff0c;在两边取两个区间&#xff0c;使得这两个区间的之和等于x&a…

数据结构(Java实现)-优先级队列(堆)

队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&#xff0c;一般出队 列在这种情况下&#xff0c;数据结构应该提供两个最基本的操作&#xff0c;一个是返回最高优先级对象&#xff0c;一个是添加新的对象。 这种数据结构就…

Markdown 扩展语法练习

风无痕 August 26, 2023 Markdown 入门指南Markdown 基本语法Markdown 扩展语法Markdown 基本语法练习Markdown 扩展语法练习 代码 <h2 id"table">表格</h2>| Syntax | Description | | --- | --- | | Header | Title | | Paragraph | Text |### 对齐| …

基于Python+djangoAI 农作物病虫害预警系统智能识别系统设计与实现(源码&教程)

1.背景 随着科技的发展&#xff0c;机器学习技术在各个领域中的应用越来越广泛。在农业领域&#xff0c;机器学习技术的应用有助于提高农作物的产量和质量&#xff0c;降低农业生产的成本。本文针对农作物健康识别问题&#xff0c;提出一种基于机器学习方法的农作健康识别系统&…

1、Odoo开发起点

1.1.odoo的模块组成 init.py将一个文件夹编程python包manifestpyodoo模块定义的清单文件&#xff0c;用于对odoo模块管理详见model模型类文件&#xff0c;存放py文件security表级别权限管理static静态文件views视图文件。wizard瞬态模型向导文件位置 1.2.odoo的开发规范 非强…

Vue3.0极速入门 - 环境安装新建项目

Vue介绍 Vue.js 是什么 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整…

模型量化(Model Quantization)

1. 简介 模型量化&#xff08;Model Quantization&#xff09;通过某种方法将浮点模型转为定点模型。比如说原来的模型里面的权重&#xff08;weight&#xff09;都是float32&#xff0c;通过模型量化&#xff0c;将模型变成权重&#xff08;weight&#xff09;都是int8的定点…

c++ qt--事件过滤(第七部分)

c qt–事件过滤&#xff08;第七部分&#xff09; 一.为什么要用事件过滤 上一篇博客中我们用到了事件来进行一些更加细致的操作&#xff0c;如监控鼠标的按下与抬起&#xff0c;但是我们发现如果有很多的组件那每个组件都要创建一个类&#xff0c;这样就显得很麻烦&#xff…

Vue3.0 新特性以及使用变更总结

Vue3.0 在2020年9月正式发布了&#xff0c;也有许多小伙伴都热情的拥抱Vue3.0。去年年底我们新项目使用Vue3.0来开发&#xff0c;这篇文章就是在使用后的一个总结&#xff0c; 包含Vue3新特性的使用以及一些用法上的变更。 图片.png 为什么要升级Vue3 使用Vue2.x的小伙伴都熟悉…

亚马逊云科技 re:Inforce 大会云安全合规与技术实践及 Security Jam 大赛,快来报名吧!...

‍‍ 2023年8月31日在北京 亚马逊云科技 re:Inforce 大会 首次登陆中国&#xff01; 我们期待您的莅临&#xff0c; 并与您一起迎接 AI 时代&#xff0c; 开启全面智能的安全旅程&#xff01; 在13:00-17:00的 培训与动手实验环节中 云安全合规与技术实践 及 Security Jam 大赛…