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

本文主要是介绍代码随想录算法训练营第四十六天|139.单词拆分,多重背包,背包问题总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 139.单词拆分
    • 思路
    • 代码
  • 多重背包
    • 思路
    • 代码
  • 背包问题总结

139.单词拆分

题目链接:704. 二分查找

文档讲解:代码随想录

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

思路

dp数组dp[i]表示长度为i的字符串是否可以拆分为一个或多个再字典中出现的单词。

递推公式:如果dp[j]为true,且[j, i]区间的字串出现在字典中,则dp[i]为true。

如:对于dp[i],遍历j=0~i,如果字串[j, i]出现在字典中,且dp[j]为true,则dp[i]为true。

代码

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 = 0; i <= s.size(); i++) {for (int j = 0; j <= i; j++) {string word = s.substr(j, i - j);if (wordSet.find(word) != wordSet.end() && dp[j])dp[i] = true;}}return dp[s.size()];}
};

多重背包

题目链接:56. 携带矿石资源(第八期模拟笔试)

文档讲解:代码随想录

思路

将多重背包中的所有物品展开,则转换为01背包问题。

代码

#include <iostream>
#include <vector>
#include <string>
#include <unordered_set>using namespace std;int main() {int C, N;cin >> C >> N;vector<int> weights(N, 0);vector<int> values(N, 0);vector<int> nums(N, 0);for (int i = 0; i < N; i++)cin >> weights[i];for (int i = 0; i < N; i++)cin >> values[i];for (int i = 0; i < N; i++)cin >> nums[i];int num_count = 0;for (auto i : nums)num_count += i;vector<int> stones_weights(num_count, 0);vector<int> stones_values(num_count, 0);int index = 0;for (int i = 0; i < N; i++) {for (int j = 0; j < nums[i]; j++) {stones_weights[index] = weights[i];stones_values[index] = values[i];index++;}}vector<int> dp(C + 1, 0);for (int i = 0; i < stones_weights.size(); i++) {for (int j = C; j >= stones_weights[i]; j--) {dp[j] = max(dp[j], dp[j - stones_weights[i]] + stones_values[i]);}}cout << dp[C] << endl;
}

背包问题总结

文档讲解:代码随想录

按背包类型分类:01背包、完全背包、多重背包等。

  • 01背包:遍历背包时从后向前遍历
  • 完全背包:遍历背包时从前向后遍历
  • 多重背包:将物品展开转换为01背包问题

按所求问题分类:能否装满背包,背包最多装多少,装满背包有多少种方法,背包装满最大价值,装满背包所需最小物品数。

  • 能否装满背包:dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]),即01背包问题中价值和重量相同,装完背包后,最大价值与背包容量相同则可以装满背包。
  • 背包最多装多少:dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]),即01背包问题中价值和重量相同。
  • 装满背包有多少种方法:dp[j] += dp[j - nums[i]]。
  • 背包装满最大价值:dp[j] = max(dp[j], dp[j - weight[i]] + value[i])。
  • 装满背包所需最小物品数:dp[j] = min(dp[j], dp[j - nums[i]] + 1)。

遍历顺序

  • 求组合数:外层循环遍历物品,内层循环遍历背包。
  • 求排列数:外层循环遍历背包,内层循环遍历物品。

这篇关于代码随想录算法训练营第四十六天|139.单词拆分,多重背包,背包问题总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

Spring的RedisTemplate的json反序列泛型丢失问题解决

《Spring的RedisTemplate的json反序列泛型丢失问题解决》本文主要介绍了SpringRedisTemplate中使用JSON序列化时泛型信息丢失的问题及其提出三种解决方案,可以根据性... 目录背景解决方案方案一方案二方案三总结背景在使用RedisTemplate操作redis时我们针对

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map

nginx中端口无权限的问题解决

《nginx中端口无权限的问题解决》当Nginx日志报错bind()to80failed(13:Permissiondenied)时,这通常是由于权限不足导致Nginx无法绑定到80端口,下面就来... 目录一、问题原因分析二、解决方案1. 以 root 权限运行 Nginx(不推荐)2. 为 Nginx

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤