代码随想录算法训练营第四十六天|139.单词拆分、关于多重背包,你该了解这些!、背包问题总结篇!

news/2024/12/23 11:54:56 标签: 算法, java, 开发语言

文章目录

  • 一、139.单词拆分
  • 二、关于多重背包,你该了解这些!
  • 三、背包问题总结篇!
  • 总结


一、139.单词拆分

java">    public boolean wordBreak(String s, List<String> wordDict) {
        //完全背包问题,因为可以重复,背包正序排列
        //排列问题,先遍历背包,再遍历物品
        boolean[] dp = new boolean[s.length()+1];//容量为j的背包,是否可以拼接出来
        Arrays.fill(dp,false);
        dp[0] = true;
        for(int j=0;j<=s.length();j++){//遍历背包
            for(int i=0;i<wordDict.size();i++){//遍历物品
                if(j>= wordDict.get(i).length()&&dp[j - wordDict.get(i).length()]&& s.substring(j - wordDict.get(i).length(), j).equals(wordDict.get(i))){
                    dp[j]=true;       
                }
                // if (j >= wordDict.get(i).length() && dp[j - wordDict.get(i).length()] && s.substring(j - wordDict.get(i).length(), j).equals(wordDict.get(i))) {
                //     dp[j] = true;
                //     // break;
                // }
                
            }
        }
        return dp[s.length()];
        
    }

11分钟

二、关于多重背包,你该了解这些!

  • 自己看到题目的第一想法

  • 看完题解之后的想法

  • 自己实现过程中遇到的问题总结

46分钟

三、背包问题总结篇!

  1. 问能否能装满背包(或者最多装多少):dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]); ,对应题目如下:
    动态规划:416.分割等和子集(opens new window)
    动态规划:1049.最后一块石头的重量 II(opens new window)

  2. 问装满背包有几种方法:dp[j] += dp[j - nums[i]] ,对应题目如下:
    动态规划:494.目标和(opens new window)
    动态规划:518. 零钱兑换 II(opens new window)
    动态规划:377.组合总和Ⅳ(opens new window)
    动态规划:70. 爬楼梯进阶版(完全背包)(opens new window)

  3. 问背包装满最大价值:dp[j] = max(dp[j], dp[j - weight[i]] + value[i]); ,对应题目如下:
    动态规划:474.一和零(opens new window)

  4. 问装满背包所有物品的最小个数:dp[j] = min(dp[j - coins[i]] + 1, dp[j]); ,对应题目如下:
    动态规划:322.零钱兑换(opens new window)
    动态规划:279.完全平方数

  5. 如果求组合数就是外层for循环遍历物品,内层for遍历背包。
    如果求排列数就是外层for遍历背包,内层for循环遍历物品。
    在这里插入图片描述

总结


http://www.niftyadmin.cn/n/393769.html

相关文章

图文并茂教你快速入门React系列04-状态管理

在React中&#xff0c;什么是状态&#xff1f; 响应式 使用 React&#xff0c;你不用直接从代码层面修改 UI。举个栗子哇&#xff0c;不用编写诸如“禁用按钮”、“启用按钮”、“显示成功消息”等命令。相反&#xff0c;你只需要描述组件在不同状态&#xff08;“初始状态”…

Elasticsearch 和 Kibana 的实时大数据分析系统

Elasticsearch 和 Kibana 的实时大数据分析系统 一、简介1. 定义及特点2. 基本功能3. 数据索引与查询 二、Kibana 简介1. 定义及特点2. 基本功能与架构3. Kibana 可视化交互性 三、Elasticsearch 和 Kibana 的集成1. 集成意义2. 集成方法2.1 安装 Elasticsearch2.2 安装 Kibana…

web前端 --- BOM编程、DOM编程

BOM编程&#xff08;browser object model -- 浏览器对象模型&#xff09; BOM给JavaScript提供用来操作浏览器的若干的"方法" 操作 在 js 看来&#xff0c;一个完整的浏览器包含如下组件&#xff1a; window窗口 // 整个浏览器的窗口 |-- history …

chatgpt赋能python:Python取出列表中的某个数

Python取出列表中的某个数 在Python中&#xff0c;列表是一种非常重要的数据类型&#xff0c;它可以用来存储一系列有序的元素。在实际的开发中&#xff0c;经常会需要从列表中取出某个特定的数值&#xff0c;本文将介绍如何在Python中完成这个操作。 1. 使用index方法 Py…

chatgpt赋能python:Python句柄是什么意思?

Python句柄是什么意思&#xff1f; 在进行Python编程时&#xff0c;可能会涉及到句柄(handle)的概念。那么&#xff0c;什么是Python句柄呢&#xff1f;在本文中&#xff0c;我们将深入探讨这个问题&#xff0c;并解释句柄的用途和重要性。 什么是Python句柄&#xff1f; …

chatgpt赋能python:Python实现CSV文件只取某两列的方法详解

Python实现CSV文件只取某两列的方法详解 介绍 CSV是一种常见的数据格式&#xff0c;通常使用逗号或分号分隔不同的字段。在处理CSV文件时&#xff0c;我们经常需要只提取其中的某些列&#xff0c;以便进行进一步的分析或处理。使用Python语言&#xff0c;可以很方便地实现…

chatgpt赋能python:Python中取出中间文本的方法

Python中取出中间文本的方法 在Python开发中&#xff0c;我们常常需要从字符串中取出特定位置的文本&#xff0c;例如从一个网页源码中提取出指定的内容。而且&#xff0c;一份好的代码需要清晰易懂、高效可靠。那么&#xff0c;在Python中如何取出中间文本呢&#xff1f;…

他山之石可以攻玉:解锁9个chatGPT常用姿势

ChatGPT是一个颠覆性的人工智能&#xff0c;可以用来实现众多目标。下面是我们用中文提出的关于这些任务的指令&#xff0c;以及来自ChatGPT的中文回答示例。 调试代码 提示&#xff1a;为什么我的python代码报错&#xff1a;x [2, 3, 8 9]&#xff1f; ChatGPT回答&#x…