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

代码随想录动态规划05

74.一和零

视频讲解:动态规划之背包问题,装满这个背包最多用多少个物品?| LeetCode:474.一和零_哔哩哔哩_bilibili

代码随想录

给你一个二进制字符串数组 strs 和两个整数 m 和 n 。

请你找出并返回 strs 的最大子集的大小,该子集中 最多 有 m 个 0 和 n 个 1 。

如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。

示例 1:

  • 输入:strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3

  • 输出:4

  • 解释:最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ,因此答案是 4 。 其他满足题意但较小的子集包括 {"0001","1"} 和 {"10","1","0"} 。{"111001"} 不满足题意,因为它含 4 个 1 ,大于 n 的值 3 。

    class Solution {
    public:int findMaxForm(vector<string>& strs, int m, int n) {vector<vector<int>>dp(m+1,vector<int>(n+1,0));dp[0][0]=0;for(string &s:strs){int count0=0;int count1=0;for(char a:s){if(a=='1')  count1++;if(a=='0')  count0++;}for(int i=m;i>=count0;i--){for(int j=n;j>=count1;j--)//倒叙遍历,0-1问题{dp[i][j]=max(dp[i][j],dp[i-count0][j-count1]+1);//遍历完当前string,字符串长度应该加1}}}return dp[m][n];}
    };

    此题注意顶:1.关于字符串的遍历问题,如何遍历字符串数组中的每一个字符串的单个字符

  • 2.可以效仿前面例子,计算一下sum,即count1,count0。

  • 3.注意区分差异,应该使用二维数组储存

  • 完全背包

    视频讲解:带你学透完全背包问题! 和 01背包有什么差别?遍历顺序上有什么讲究?_哔哩哔哩_bilibili

    https://programmercarl.com/%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%98%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80%E5%AE%8C%E5%85%A8%E8%83%8C%E5%8C%85.html 

    最大区别是每一个物体可以多次重复取

    小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等,它们各自占据不同的重量,并且具有不同的价值。

    小明的行李箱所能承担的总重量是有限的,问小明应该如何抉择,才能携带最大价值的研究材料,每种研究材料可以选择无数次,并且可以重复选择。

    输入描述

    第一行包含两个整数,n,v,分别表示研究材料的种类和行李所能承担的总重量 

    接下来包含 n 行,每行两个整数 wi 和 vi,代表第 i 种研究材料的重量和价值

    #include<iostream>
    #include<vector>
    using namespace std;
    int main()
    {int n;int v;cin>>n>>v;vector<int>goods(n);//变长数组vector<int>value(n);int index1=0;int index2=0;for(int i=0;i<n;i++)
    {int wi,vi;cin>>wi>>vi;goods[index1++]=wi;value[index2++]=vi;
    }
    vector<int>dp(v+1,0);
    for(int i=0;i<n;i++)
    {for(int j=goods[i];j<=v;j++){dp[j]=max(dp[j],dp[j-goods[i]]+value[i]);}
    }
    cout<<dp[v]<<endl;
    return 0;
    }
    

    完全背包问题,for循环不用考虑倒序

    518. 零钱兑换 II

    视频讲解:动态规划之完全背包,装满背包有多少种方法?组合与排列有讲究!| LeetCode:518.零钱兑换II_哔哩哔哩_bilibili

    代码随想录

    给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。

    示例 1:

    输入: amount = 5, coins = [1, 2, 5] 输出: 4

    示例 2:

    输入: amount = 3, coins = [2] 输出: 0 解释: 只用面额2的硬币不能凑成总金额3。
    • 5=2+2+1
    • 5=2+1+1+1
    • 5=1+1+1+1+1

    解释: 有四种方式可以凑成总金额:

    5=5
    class Solution {
    public:int change(int amount, vector<int>& coins) {vector<uint64_t>dp(amount+1,0);//防止数值相加范围超过int的边界dp[0]=1;for(int i=0;i<coins.size();i++){for(int j=coins[i];j<=amount;j++){dp[j]+=dp[j-coins[i]];}}return dp[amount];}
    };

    377. 组合总和 Ⅳ

    视频讲解:动态规划之完全背包,装满背包有几种方法?求排列数?| LeetCode:377.组合总和IV_哔哩哔哩_bilibili

    代码随想录

    给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。

    题目数据保证答案符合 32 位整数范围。(注意判别是否溢出)

    class Solution {
    public:int combinationSum4(vector<int>& nums, int target) {vector<long long>dp(target+1,0);dp[0]=1;//组合个数,什么都不选for(int i=1;i<=target;i++){for(int j=0;j<nums.size();j++){if(i>=nums[j]&&(dp[i]+dp[i-nums[j]])<INT_MAX){ dp[i]+=dp[i-nums[j]];}}}
    return dp[target];}
    };

    组合DP:假设我们使用组合 DP的方式,即 先遍历硬币,再遍历金额。我们每次遍历硬币时,从小到大地更新 dp,也就是说,我们先考虑一个硬币,然后考虑如何通过已选的硬币来凑成目标金额。

    for (int num : nums) {  // 先遍历硬币for (int i = num; i <= target; i++) {  // 再遍历金额dp[i] += dp[i - num];}
    }
    
    如何理解:

    硬币 1:从金额 1 开始,遍历到目标金额 3

    • dp[1] += dp[0]

    • dp[2] += dp[1]

    • dp[3] += dp[2]

    硬币 2:然后再考虑硬币 2,从金额 2 开始。

    • dp[2] += dp[0]

    • dp[3] += dp[1]

    • 关键点:
    • 顺序被固定:(顺序已经从小到大)
      当我们遍历硬币时,我们始终会先处理较小的硬币(比如 1),然后再考虑较大的硬币(比如 2)。在每个金额 i 上,硬币 1 会先被考虑,而硬币 2 只会在硬币 1 被处理过后再去填充 dp[i]。这种顺序确保了相同的硬币组合不会重复计算。

    • 避免重复组合:
      由于硬币的遍历顺序是固定的,我们总是从较小的硬币开始,避免了 (1, 2)(2, 1) 被重复计算。因为是由小到大,所以只能是(1,2)组成,顺序已经固定

    • 换句话说,每次计算金额时,只会选择硬币之前已经考虑过的硬币,所以相同的组合只会被计入一次。

    排列DP:排列 DP: 相比之下,排列 DP 是针对 顺序不同的情况,因此我们要先遍历金额,再遍历硬币,这样每次更新时都能考虑到顺序的不同,最终统计每种排列的组合方式。

    比喻:做蛋糕

    假设你正在做一个蛋糕,你有不同种类的食材(硬币),这些食材的数量和顺序会影响蛋糕的最终味道(金额)。你的目标是做出一个指定的味道(比如 4 的蛋糕)。每次你做蛋糕时,你从不同的食材(硬币)中选择,将它们加到蛋糕中。

    步骤:

    从小到大做蛋糕: 你开始时做的是一个小蛋糕,味道是 1,然后逐渐增加味道,直到你达到 4。每次你都根据当前的蛋糕味道(当前金额),再选择一个食材(硬币)来加入。

    每次选择食材(硬币)时,都能考虑顺序: 比如你要做一个味道为 3 的蛋糕。你已经做了一个味道为 2 的蛋糕,现在你想要用食材(硬币) 1 来加,结果会变成 3,然后你继续做蛋糕。

    假设你之前已经做过味道为 2 的蛋糕,再加上食材(硬币) 1 后,你的蛋糕变成了 3,这说明你已经考虑过了食材的组合顺序,顺序是有影响的。

    70. 爬楼梯 (进阶)

    这道题目 爬楼梯之前我们做过,这次再用完全背包的思路来分析一遍

    代码随想录

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

    每次你可以爬至多m (1 <= m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢?

    注意:给定 n 是一个正整数。

    输入描述:输入共一行,包含两个正整数,分别表示n, m

    输出描述:输出一个整数,表示爬到楼顶的方法数。

    输入示例:3 2

    输出示例:3

    提示:

    当 m = 2,n = 3 时,n = 3 这表示一共有三个台阶,m = 2 代表你每次可以爬一个台阶或者两个台阶。

    此时你有三种方法可以爬到楼顶。

    1 阶 + 1 阶 + 1 阶段 1 阶 + 2 阶  2阶+1阶
    #include <iostream>
    #include <vector>
    using namespace std;
    int main() {int n, m;while (cin >> n >> m) {vector<int> dp(n + 1, 0);dp[0] = 1;for (int i = 1; i <= n; i++) { // 遍历背包for (int j = 1; j <= m; j++) { // 遍历物品if (i - j >= 0) dp[i] += dp[i - j];}}cout << dp[n] << endl;}
    }

相关文章:

代码随想录动态规划05

74.一和零 视频讲解&#xff1a;动态规划之背包问题&#xff0c;装满这个背包最多用多少个物品&#xff1f;| LeetCode&#xff1a;474.一和零_哔哩哔哩_bilibili 代码随想录 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的大小&#…...

Next.js 深度解析:全栈React框架的架构哲学与实践精髓

Next.js 作为 React 生态中最流行的全栈框架&#xff0c;已经超越了简单的SSR工具&#xff0c;发展成为完整的Web开发解决方案。以下从八个维度进行深度剖析&#xff1a; 一、核心架构设计 双引擎驱动模型 页面路由系统&#xff1a;基于文件系统的约定式路由渲染引擎&#xff…...

Node.js Express 处理静态资源

目录 1. 什么是静态资源&#xff1f; 2. 安装 Express 3. 目录结构 4. 创建 server.js 5. 创建 public/index.html 6. 创建 public/style.css 7. 创建 public/script.js 8. 运行服务器 9. 结语 1. 什么是静态资源&#xff1f; 静态资源指的是 HTML、CSS、JavaScript、…...

2025企业级项目设计三叉戟:权限控制+错误监控+工程化提效实战指南

一、权限系统设计&#xff1a;动态路由与按钮级控制的终极方案 1. 权限系统架构设计痛点 路由权限滞后&#xff1a;传统方案需页面加载后动态计算路由表&#xff0c;导致首屏白屏时间增加30%按钮颗粒度不足&#xff1a;基于角色的权限控制&#xff08;RBAC&#xff09;无法满…...

DeepSeek-V3新版本DeepSeek-V3-0324

中国人工智能初创公司深度求索&#xff08;DeepSeek&#xff09;2025年3月24日深夜低调上线了DeepSeek-V3的新版本DeepSeek-V3-0324&#xff0c;参数量为6850亿&#xff0c;在代码、数学、推理等多个方面的能力再次显著提升&#xff0c;甚至代码能力追平美国Anthropic公司大模型…...

108回回目设计

由于108回完整目录篇幅极长&#xff0c;我将以分卷缩略核心回目详解形式呈现&#xff0c;既保证完整性&#xff0c;又避免信息过载。以下是凝练后的完整框架与部分代表性回目&#xff1a; 第一卷&#xff1a;京口草鞋摊的野望&#xff08;1-36回&#xff09; 核心矛盾&#xf…...

探索:如何构建一个自我的AI辅助的开发环境?

构建支持AI的开发辅助环境并实现全流程自动化&#xff0c;需要整合开发工具链、AI模型服务和自动化流水线。以下是分步实施指南&#xff0c;包含关键技术栈和架构设计&#xff1a; 一、开发环境基础架构 1. 工具链集成平台 #mermaid-svg-RFSaibQJwVEcW9fT {font-family:"…...

国产RISC-V车规芯片当前现状分析——从市场与技术角度出发

摘要 随着汽车产业的智能化、电动化转型加速&#xff0c;车规级芯片的战略地位日益凸显。RISC-V指令集凭借其开源、灵活、低功耗等优势&#xff0c;成为国产车规芯片的重要发展方向。本文从市场与技术两个维度出发&#xff0c;深入分析国产RISC-V车规芯片的现状。通过梳理国内…...

华为eNSP-配置静态路由与静态路由备份

一、静态路由介绍 静态路由是指用户或网络管理员手工配置的路由信息。当网络拓扑结构或者链路状态发生改变时&#xff0c;需要网络管理人员手工修改静态路由信息。相比于动态路由协议&#xff0c;静态路由无需频繁地交换各自的路由表&#xff0c;配置简单&#xff0c;比较适合…...

数据分析中,文件解析库解析内容样式调整(openpyxl 、tabulate)

CSV文件&#xff1a;使用Python标准库中的csv模块&#xff0c;通过简单的文本解析来读取数据。 Excel文件&#xff1a;使用专门的库&#xff08;如openpyxl、xlrd&#xff09;来解析复杂的文件格式&#xff0c;或者使用pandas库来简化读取过程。 openpyxl openpyxl 是一个 Pyt…...

时尚界正在试图用AI,创造更多冲击力

数字艺术正以深度融合的方式&#xff0c;在时尚、游戏、影视等行业实现跨界合作&#xff0c;催生了多样化的商业模式&#xff0c;为创作者和品牌带来更多机会&#xff0c;数字艺术更是突破了传统艺术的限制&#xff0c;以趣味触达用户&#xff0c;尤其吸引了年轻一代的消费群体…...

ai画图comfyUI 精准定位gligen。允许指定图像中多个对象的位置和大小

基础功能下&#xff0c;outpainting是内容填充&#xff0c;拉近拉远镜头&#xff0c;自动填充旁边物体。嵌入模型也需要单独下载&#xff0c;演示完示例后推荐模型站有更直观效果介绍和用法。选中精确定位。看一眼坐标&#xff0c;直接默认出一张图。然后修改定位&#xff0c;和…...

Python @property 装饰器深度使用教程

一、基础概念与核心原理 1. 装饰器本质 property 是 Python 内置的属性管理装饰器&#xff0c;它将类方法转换为类属性访问接口。其核心价值在于&#xff1a; ​封装性&#xff1a;隐藏属性操作的具体实现​可维护性&#xff1a;在不改变外部接口的前提下修改内部逻辑​安全…...

#VCS# 关于 +incdir+xxx 编译选项的注意点

前段时间,工作中遇到百思不得其解的坑。 按照以往的理解,没有找到任何可能问题点。今天总结下来。 学习目标: +incdir+ 是 VCS 编译器中用于指定 包含文件(include files) 搜索路径的重要选项,主要用于指定 `include 指令的搜索目录。 一 基本功能 作用:添加 Verilog/S…...

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例7,TableView16_07 列拖拽排序示例

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例7,TableView16_07 列…...

JAVA学习-练习试用Java实现“实现一个Hadoop程序,对大数据集中的文本数据进行自然语言处理和关键词筛选”

问题&#xff1a; 使用java语言&#xff0c;实现一个Hadoop程序&#xff0c;对大数据集中的文本数据进行自然语言处理和关键词筛选。 解答思路&#xff1a; 使用Java语言和Hadoop实现自然语言处理和关键词筛选&#xff0c;你需要创建一个MapReduce程序。以下是一个简单的示例&…...

使用idea开发spark程序

新建scala 项目 创建lib目录 将spark jars/ 路径下所有jar 复制到 lib目录 添加依赖 创建scala 程序 package sparkimport org.apache.spark.{SparkConf, SparkContext}object WordCount {def main(args: Array[String]): Unit {val conf new SparkConf().setAppName(&q…...

看懂roslunch输出

自编了一个demo 第一步&#xff1a;创建功能包 cd ~/catkin_ws/src catkin_create_pkg param_demo roscpp第二步&#xff1a;写 main.cpp 创建文件&#xff1a;param_demo/src/param_node.cpp #include <ros/ros.h> #include <string>int main(int argc, char*…...

洛谷题单1-B2005 字符三角形-python-流程图重构

题目描述 给定一个字符&#xff0c;用它构造一个底边长 5 5 5 个字符&#xff0c;高 3 3 3 个字符的等腰字符三角形。 输入格式 输入只有一行&#xff0c;包含一个字符。 输出格式 该字符构成的等腰三角形&#xff0c;底边长 5 5 5 个字符&#xff0c;高 3 3 3 个字符…...

学习日记0327

A cross-domain knowledge tracing model based on graph optimal transport 我们使用gnn来学习这些节点的特征。在此基础上&#xff0c;我们使用显式分布距离度量对齐来自两个不同域的特征向量&#xff0c;旨在最小化域差异&#xff0c;实现最大的跨域知识转移。 AEGOT-CDKT…...

CSS学习笔记6——网页布局

目录 一、元素的浮动属性、清除浮动 清除浮动的其他方法 1、使用空标签清除浮动影响 2、使用overflow属性清除浮动 3、使用伪元素清除浮动影响 原理 overflow属性 二、元素的定位 1、相对定位 2、绝对定位 ​编辑 3、固定定位 z-index层叠等级属性 一、元素的浮动…...

dubbo http流量接入dubbo后端服务

简介 dubbo协议是基于TCP的二进制私有协议&#xff0c;更适合作为后端微服务间的高效RPC通信协议&#xff0c;也导致dubbo协议对于前端流量接入不是很友好。在dubo框架中&#xff0c;有两种方式可以解决这个问题&#xff1a; 多协议发布【推荐】&#xff0c;为dubbo协议服务暴…...

线程同步——互斥锁

线程同步——互斥锁 目录 一、基本概念 二、打印成对出现的字母 三、生产者消费者&#xff08;有限缓冲问题&#xff09; 3.1 基本概念 3.2 代码实现 一、基本概念 互斥锁是一种用于控制对共享资源访问的同步机制。它确保在同一时间内&#xff0c;只有一个线程可以访问被…...

机试题——村落基站建设

题目描述 假设村落以二叉树的形状分布&#xff0c;我们需要选择在哪些村落建设基站。如果某个村落建设了基站&#xff0c;那么它和它相邻的村落&#xff08;包括本节点、父节点和子节点&#xff09;也会有信号覆盖。目标是计算出最少需要建设的基站数。 输入描述 输入为一个…...

C#实现HTTP服务器:处理文件上传---解析MultipartFormDataContent

完整项目托管地址&#xff1a;https://github.com/sometiny/http HTTP还有重要的一块&#xff1a;文件上传。 这篇文章将详细讲解下&#xff0c;前面实现了同一个链接处理多个请求&#xff0c;为了方便&#xff0c;我们独立写了一个HTTP基类&#xff0c;专门处理HTTP请求。 ht…...

leetcoed0044. 通配符匹配 hard

1 题目&#xff1a;通配符匹配 官方难度&#xff1a;难 给你一个输入字符串 (s) 和一个字符模式 ( p ) &#xff0c;请你实现一个支持 ‘?’ 和 ‘*’ 匹配规则的通配符匹配&#xff1a; ‘?’ 可以匹配任何单个字符。 ‘*’ 可以匹配任意字符序列&#xff08;包括空字符序…...

蓝桥杯嵌入式第十二届程序设计题

一、题目概览 设计一个小型停车计费系统 二、分模块实现 1、LCD void disp_proc() {if(view0){char text[30];sprintf(text," Data");LCD_DisplayStringLine(Line2,(uint8_t *)text);sprintf(text," CNBR:%d ",Cnum);LCD_DisplayStri…...

第十四届MathorCup高校数学建模挑战赛-C题:基于 LSTM-ARIMA 和整数规划的货量预测与人员排班模型

目录 摘要 一、 问题重述 1.1 背景知识 1.2 问题描述 二、 问题分析 2.1 对问题一的分析 2.2 对问题二的分析 2.3 对问题三的分析 2.4 对问题四的分析 三、 模型假设 四、 符号说明 五、 问题一模型的建立与求解 5.1 数据预处理 5.2 基于 LSTM 的日货量预测模型 5.3 日货量预测…...

python多态、静态方法和类方法

目录 一、多态 二、静态方法 三、类方法 一、多态 多态&#xff08;polymorphism&#xff09;是面向对象编程中的一个重要概念&#xff0c;指的是同样的方法调用可以在不同的对象上产生不同的行为。在Python中&#xff0c;多态是通过方法的重写&#xff08;override&#x…...

DTMF从2833到inband的方案

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 之前的文章中介绍过通过dialplan拨号计划配置的方法&#xff0c;实现2833到inband的转换&#xff0c;但是实际生产环境中的场景会更复杂&#xff0c;无法预先在dialplan中设置好相关参数和函数。 环境 CentOS 7.9 fr…...