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

深度剖析:动态规划的分类及实例

如你所知动态规划可以根据问题特性分为多种类型以下是几种经典问题类型及对应的实例。背包问题背包问题是一种资源类问题涉及在给定约束条件下如何最大化目标值。常见的是 0-1 背包、完全背包、多重背包。0-1 背包问题每个物品只选择一次典型题目分割等和子集题目描述给定一个只包含正整数的数组判断是否可以将它分割成两个子集使得两个子集的和相等。解题思路这个题目可以换一种思路给定一个只包含正整数的非空数组判断是否可以从数组中选出一些数字使得这些数字的和等于整个数组的元素和的一半。因此这个问题可以转换成0−1 背包问题。这道题与传统的0−1 背包问题的区别在于传统的0−1 背包问题要求选取的物品的重量之和不能超过背包的总容量这道题则要求选取的数字的和恰好等于整个数组的元素和的一半。在使用动态规划求解之前首先需要进行以下判断1. 根据数组的长度 n 判断数组是否可以被划分。如果 n2则不可能将数组分割成元素和相等的两个子集因此直接返回 false。2. 为了能实现目标值为 target/2如果 target 是奇数直接返回 false。创建动态数组 dpdp[j] 表示能否从数组的前几个元素中选出一个子集使得子集的和等于 j。dp[j] 是一个布尔值初始状态是 dp[0] 为 true,因为不选任何元素和为 0 是可行的。对于每个 nums[i]我们有两种选择如果不选 nums[i]子集的和仍然是 j所以 dp[j] dp[j]如果选 nums[i]在选这个数之前子集的和仍然是 j-nums[i]。如果能从之前的元素中找到和为 j-nums[i]那么 dp[j] dp[j-nums[i]] || dp[j]。其中dp[j] 表示上一次的值即以前就可以组成和为 j 的子集不依赖 nums[i]那么此时依然可以组成和为 j。代码如下bool canPartition(vectorint nums) { int sum accumulate(nums.begin(), nums.end(), 0); if (sum % 2 ! 0) return false; int target sum / 2; vectorbool dp(target 1, false); dp[0] true; // 和为 0 总是可以实现的 for (int num : nums) { for (int j target; j num; --j) { dp[j] dp[j] || dp[j - num]; } } return dp[target]; }时间复杂度O(n*target)空间复杂度O(target)好了本篇文章的介绍到这里就结束了希望对大家的学习有所帮助哦

相关文章:

深度剖析:动态规划的分类及实例

如你所知,动态规划可以根据问题特性分为多种类型,以下是几种经典问题类型及对应的实例。背包问题背包问题是一种资源类问题,涉及在给定约束条件下如何最大化目标值。常见的是 0-1 背包、完全背包、多重背包。0-1 背包问题:每个物品…...

扔掉Zabbix!OpenClaw一键搭建7×24服务器监控,告警零误报+自动故障自愈

前言 做运维的同学,肯定都有过这样的噩梦:凌晨3点被电话吵醒,说服务器挂了;赶到公司排查了半小时,发现只是Nginx进程死了;刚躺下没多久,又一个电话打过来,说磁盘满了。我之前管着公司…...

5分钟解决Windows软件运行错误:Visual C++运行库终极修复指南

5分钟解决Windows软件运行错误:Visual C运行库终极修复指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 当您打开软件时突然弹出"缺少MSVCR1…...

产品经理和开发者必看:如何为你的项目规划Alpha、Beta到Release的发布路线图?

产品经理和开发者必看:如何为你的项目规划Alpha、Beta到Release的发布路线图? 在软件开发的旅程中,从最初的构想到最终的产品发布,每一个阶段都承载着不同的目标和挑战。对于产品经理、项目经理和技术负责人来说,如何科…...

【免费降AI教程】论文降AIGC工具怎么选?实测DeepSeek等10款软件,手把手教你零成本降AI率

说起来都是泪,上个月我交毕业论文的时候,明明自己一个字一个字敲出来的,结果一检测,AI率居然飙到73%!当时距离截止日期只剩三天,导师还在催稿,那种绝望的感觉现在想起来还心有余悸。 这一个多月…...

如何在Windows上实现macOS风格三指拖拽:ThreeFingerDragOnWindows终极指南

如何在Windows上实现macOS风格三指拖拽:ThreeFingerDragOnWindows终极指南 【免费下载链接】ThreeFingersDragOnWindows Enables macOS-style three-finger dragging functionality on Windows Precision touchpads. 项目地址: https://gitcode.com/gh_mirrors/th…...

SAP采购订单行项目增强实战:用BADI ME_GUI_PO_CUST添加自定义字段(避坑指南)

SAP采购订单行项目增强实战:用BADI ME_GUI_PO_CUST添加自定义字段(避坑指南) 在SAP标准采购订单(ME21N/ME22N/ME23N)中扩展行项目字段是常见的业务需求,比如添加"紧急程度"或"内部备注"…...

Balsamiq Wireframes 从零到一:新手快速上手指南

1. 认识Balsamiq Wireframes:手绘风格的线框神器 第一次打开Balsamiq Wireframes时,你会被它独特的手绘风格吸引。这款工具就像是把设计师的草图本搬到了电脑里,所有UI元素都带着铅笔素描的质感。我刚开始接触产品设计时,最头疼的…...

已解决Spring Cloud 2022+中FeignClient启动报错:No Feign Client for loadBalancing defined

1. 问题现象与错误分析 最近在升级到Spring Cloud 2022.0.x和Spring Boot 3.x后,很多开发者都遇到了一个典型的启动报错:"No Feign Client for loadBalancing defined"。这个错误通常发生在服务启动阶段,控制台会打印出一长串的依赖…...

OpticsPy:用Python解决光学系统设计的矩阵计算与光线追迹难题

OpticsPy:用Python解决光学系统设计的矩阵计算与光线追迹难题 【免费下载链接】opticspy python optics module 项目地址: https://gitcode.com/gh_mirrors/op/opticspy 传统光学设计面临两大核心挑战:商业软件封闭昂贵,无法与现代化开…...

UG后处理TCL编程实战:手把手教你定制刀具信息输出格式(含完整代码)

UG后处理TCL编程实战:手把手教你定制刀具信息输出格式(含完整代码) 在数控加工领域,UG后处理的灵活定制能力直接决定了最终加工程序的可用性和效率。刀具信息作为程序中最关键的参数之一,其输出格式的合理设计不仅能减…...

别再只盯着batch-size了!用Tesla V100训练YOLO时,这些隐藏的显存杀手和监控技巧你知道吗?

别再只盯着batch-size了!用Tesla V100训练YOLO时,这些隐藏的显存杀手和监控技巧你知道吗? 当你手握一块Tesla V100这样的顶级GPU,却发现训练YOLO时依然频频遭遇"爆显存"的尴尬,这感觉就像开着跑车却堵在早高…...

当经典运筹学遇上深度强化学习:我们离‘一键最优’的智能工厂还有多远?

深度强化学习重构制造业调度:从理论到落地的关键突破 走进任何一家现代化制造工厂,你都会看到数百台设备在同步运转,成千上万的零件在不同工序间流转。这种复杂场景下的生产调度,堪称工业界的"终极算法挑战"。传统运筹学…...

终极风扇控制指南:5分钟让Windows风扇静音又高效

终极风扇控制指南:5分钟让Windows风扇静音又高效 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/FanC…...

STM32网络调试救星:用HostName+DHCP告别“IP地址猜猜看”,附FreeRTOS下LWIP 2.1.2完整工程配置

STM32网络调试实战:基于HostName的智能设备发现方案 实验室里五台相同的STM32设备同时上电,LED灯整齐闪烁,但哪台对应哪个IP?这个场景让多少嵌入式开发者抓狂地插拔网线、反复刷新路由器界面。传统DHCP方案虽然解决了IP分配问题&a…...

告别Samba和FTP:用Java NFS-Client 1.0.3实现跨平台文件操作,SpringBoot项目实战

告别Samba和FTP:用Java NFS-Client 1.0.3实现跨平台文件操作,SpringBoot项目实战 在分布式系统和云原生架构日益普及的今天,传统的文件共享方案如Samba和FTP逐渐暴露出性能瓶颈和兼容性问题。本文将带你探索一种更现代、更高效的替代方案——…...

终极窗口控制指南:如何用WindowResizer轻松管理任意窗口尺寸

终极窗口控制指南:如何用WindowResizer轻松管理任意窗口尺寸 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些无法调整大小的Windows应用程序窗口而烦恼吗&am…...

告别命令行:用Gradio为你的本地Qwen-7B-Chat快速搭建一个Web聊天界面

从终端到浏览器:用Gradio打造Qwen-7B-Chat的智能对话门户 当你已经在Ubuntu 22.04上成功部署了Qwen-7B-Chat模型,却还在终端里敲击命令与AI对话时,是否想过——这就像用DOS命令行操作智能手机?本文将带你突破命令行的桎梏&#xf…...

STM32 SPI模式SD卡驱动开发与FAT16文件系统实现

1. 项目概述:基于STM32的SD卡SPI协议库开发作为一名长期从事嵌入式开发的工程师,我最近完成了一个针对STM32平台的SD卡SPI协议库实现。这个项目的核心目标是构建一个严格遵循SD协议标准的轻量级库,特别适合资源受限的嵌入式环境。与常见的Ard…...

保姆级教程:用SageMath复现CTF中的AMM算法,手算有限域开方

密码学实战:用SageMath攻克RSA中的AMM算法与有限域开方难题 密码学竞赛中那些看似无解的RSA题目,往往隐藏着令人着迷的数学奥秘。当遇到e与φ(n)不互质的特殊场景时,传统解密方法失效,我们需要搬出数论中的"重型武器"—…...

手把手教你为你的车选数字钥匙方案:ICCE标准 vs CCC标准,哪个更适合国内开发者?

数字钥匙方案深度对比:ICCE与CCC标准在国内开发中的实战选择 站在北京某新能源汽车初创公司的会议室里,技术总监李明正面临一个关键决策——新一代车型的数字钥匙系统究竟该采用国际CCC标准还是国内ICCE标准?玻璃墙外,工程师们激烈…...

手把手教你解决Sophus安装中的std::optional错误(Ubuntu20.04环境)

手把手教你解决Sophus安装中的std::optional错误(Ubuntu20.04环境) 如果你正在Ubuntu 20.04上搭建SLAM开发环境,安装Sophus库时遇到std::optional未声明的编译错误,这篇文章将为你提供一套完整的解决方案。这个错误通常与C标准版本…...

排查STM32 SPI无时钟信号:从CubeMX配置到示波器测量的完整Debug流程

STM32 SPI时钟信号消失?从CubeMX配置到硬件测量的全链路诊断手册 深夜的实验室里,示波器屏幕上那条本该跳动的SPI时钟信号线依然平静如死水。作为嵌入式开发者,这种场景再熟悉不过——明明CubeMX配置看起来一切正常,代码也顺利编译…...

微信小程序saveFile报错?别慌,手把手教你排查‘tempFilePath file not exist‘的三大元凶

微信小程序saveFile报错深度排查指南:从tempFilePath file not exist到完美解决 最近在开发微信小程序时,不少开发者都遇到了一个令人头疼的问题:saveFile:fail tempFilePath file not exist。这个报错看似简单,背后却隐藏着多种可…...

从代码到天空:深入APM飞控的`AP_Arming.cpp`,看它如何守护你的无人机第一道安全防线

从代码到天空:深入APM飞控的AP_Arming.cpp,看它如何守护你的无人机第一道安全防线 当遥控器的摇杆被推向解锁位置时,无人机并非立即响应这个动作。在电机真正开始旋转前的毫秒级瞬间,飞控系统正执行着数十项精密的安全检查。这些隐…...

别再复制粘贴了!手把手教你为STM32 HAL库项目添加串口printf调试(附MicroLib配置避坑)

STM32 HAL库串口调试终极指南:从printf重定向到高效调试技巧 在嵌入式开发中,串口调试是最基础却最关键的技能之一。很多初学者在配置STM32的printf功能时,常常陷入各种奇怪的编译错误和功能异常。本文将带你深入理解HAL库下的串口调试机制&a…...

Cesium与WebXR融合:从零构建VR地理空间应用

1. 为什么需要Cesium与WebXR的融合? 我第一次在VR头盔里看到三维地球的时候,整个人都惊呆了。那种站在太空俯瞰地球的沉浸感,完全颠覆了传统屏幕的浏览体验。但当我尝试把现有的Cesium项目移植到VR环境时,发现事情没那么简单——视…...

5分钟上手League Akari:英雄联盟玩家的终极智能助手指南

5分钟上手League Akari:英雄联盟玩家的终极智能助手指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为繁琐的游戏操作而烦…...

Phi-3.5-mini-instruct多场景:从学生作业辅导到工程师编程

Phi-3.5-mini-instruct多场景:从学生作业辅导到工程师编程 1. 模型概述 Phi-3.5-mini-instruct是微软推出的轻量级指令微调大语言模型,基于Transformer解码器架构构建。这个3.8B参数的模型特别引人注目的是它支持128K超长上下文窗口,同时保…...

从金属疲劳到复合材料脱粘:循环内聚力模型(CZM)的进阶应用与ABAQUS实现难点解析

从金属疲劳到复合材料脱粘:循环内聚力模型(CZM)的进阶应用与ABAQUS实现难点解析 当一架飞机在万米高空遭遇气流颠簸,机翼承受着反复的应力循环;当风力发电机叶片在昼夜不息的风力作用下持续摆动;当汽车发动…...