动态规划——背包问题

发布时间:2026/10/9 2:19:36

动态规划——背包问题 1、完全平方数Q给你一个整数n返回和为n的完全平方数的最少数量。完全平方数是一个整数其值等于另一个整数的平方换句话说其值等于一个整数自乘的积。例如1、4、9和16都是完全平方数而3和11不是。A 1、初始化为了得到最少数量并且保证在更新时不会被初始数值影响初始化全局为max同时为了保证可以正常开始00要重新赋值为02、更新时将本体看作要将目标值n拆解为多个完全平方数之和可以想象成我们要找到一个数组数组之和为n如果当前遍历的整数j小于对应位置的完全平方数则该位置的完全平方数无法作为该数组的元素反之则可以加入但是我们要对比加入该元素之后和不加入时哪个方案的元素数更少因为即使和相同可选择的完全平方数也有多种方案我们要找到最小的那一个。3、遍历边界对于x维度的遍历很好理解我们需要从[1m]中选择任意个对于y维度可能出现的和的区间为[0,n]刚开始没有任何元素加入时为0。4、二维空间中记录的是对应组合下最少的完全平方数class Solution { public int numSquares(int n) { int m (int) Math.sqrt(n); int[][] dp new int[m 1][n 1]; // 初始化 for(int[] r : dp) Arrays.fill(r, Integer.MAX_VALUE / 2); dp[0][0] 0; for(int i 1; i m; i){ for(int j 0; j n; j){ if(j i * i){ dp[i][j] dp[i - 1][j]; }else{ dp[i][j] Math.min(dp[i - 1][j], dp[i][j - i * i] 1); } } } return dp[m][n]; } }2、零钱兑换518Q给你一个整数数组coins表示不同面额的硬币另给一个整数amount表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额返回0。假设每一种面额的硬币有无限个。A1、其实核心思路和完全平方数是一样的只不过把if的判断条件和每次减去的值换为了coins的元素2、区别在于这次要求的是可能出现的组合数所以在初始化时要将dp[0][0]目标值为0coins.length 0)的情况初始化为13、二维空间中记录的是对应组合下总的组合数class Solution { public int coinChange(int[] coins, int amount) { int n coins.length; int[][] dp new int[n 1][amount 1]; for(int[] r : dp) Arrays.fill(r, Integer.MAX_VALUE / 2); dp[0][0] 0; for(int i 0; i n; i){ for(int j 0; j amount; j){ if(j coins[i]) dp[i 1][j] dp[i][j]; else dp[i 1][j] Math.min(dp[i 1][j - coins[i]] 1, dp[i][j]); } } return dp[n][amount] Integer.MAX_VALUE / 2 ? -1 : dp[n][amount]; } }3、组合总数377Q给你一个由不同整数组成的数组nums和一个目标整数target。请你从nums中找出并返回总和为target的元素组合的个数。顺序不同的序列被视作不同的组合。A1、初始化总和0任意前j个数字都有1种方案空序列2、根据标红部分要求要考虑顺序问题所以要先遍历target再遍历nums【先遍历 target总和 i、内层遍历 nums 数字是为了统计有序排列题目 377 要求[1,2]和[2,1]算两种不同方案 如果反过来先遍历物品再遍历金额只能统计无序组合】3、dp[i-num][n]取全部数字能凑出i-num的所有有序排列保证num可以拼接在任何顺序的序列末尾以此区分[1,2]和[2,1] 如果写成dp[i-num][j]只能用前j个数字会丢失排列、变成无序组合4、if分支区别于以上问题需要先赋给当前位置一个初始的组合上一个遍历结果之后再判断这个新的元素能不能放进去【错误做法】if(nums[j] i){ dp[i][j 1] dp[i][j]; }else{ dp[i][j 1] dp[i - nums[j]][n]; }这样会造成如果可以选当前元素会在初始为0的基础上加上这个元素这里是错的如果不选会继承上一个结果。class Solution { public int combinationSum4(int[] nums, int target) { int n nums.length; int[][] dp new int[target 1][n 1]; // 总和0任意前j个数字都有1种方案空序列 for(int i 0; i n;i) dp[0][i] 1; for(int i 0; i target; i){ for(int j 0; j n; j){ dp[i][j 1] dp[i][j]; if(nums[j] i){ dp[i][j 1] dp[i - nums[j]][n]; } } } return dp[target][n]; } }4、1和0Q给你一个二进制字符串数组strs和两个整数m和n。请你找出并返回strs的最大子集的长度该子集中最多有m个0和n个1。如果x的所有元素也是y的元素集合x是集合y的子集。A1、有三个维度字符串长度、0的个数、1的个数初始化时可以史记为三维或者二维个人倾向于二维优化一个维度空间会更好理解在这里显然是优化字符串2、统计遍历到的每隔字符串的0、1含量并将其作为m、n的下限继续下面的遍历如果不符合也就不必继续了如果符合且选择要加入这个字符串就将对应位置1并更新当前位置最大子集长度。class Solution { public int findMaxForm(String[] strs, int m, int n) { int[][] dp new int[m 1][n 1]; for(String s : strs){ char[] ch s.toCharArray(); int cntm 0; int cntn 0; for(char c : ch){ if(c 0) cntm; else cntn; } for(int j m; j cntm; j--){ for(int k n; k cntn; k--){ dp[j][k] Math.max(dp[j][k], dp[j - cntm][k - cntn] 1); } } } return dp[m][n]; } }
延伸阅读

更多相关文章

2026/10/9 2:19:36

多层RNN与LSTM深度解析:PyTorch实现、训练优化与踩坑指南

先说结论:RNN的“深度”和CNN的“深度”完全不是一回事。我一开始也是把循环神经网络当CNN用,堆了五六层LSTM上去,结果训练又慢又容易爆,后来才发现深层循环神经网络的实现细节里全是坑。这篇就拿《动手学深度学习》第58节里那套思…

2026/10/9 2:19:36

Token耗尽的账单:AI成本控制、API优化与本地部署实战

最近关于 AI 成本与公共政策的讨论里,出现了一个很有意思的提法:比尔盖茨建议对 AI 的 “token 消耗” 征税,也就是所谓的 “token 税”。这个建议乍一听有点意外,但放到 AI 算力需求暴涨、数据中心能耗飙升的背景下,它…

2026/10/9 2:19:36

中文错别字纠错实战:轻量级机器学习方案解析

简介:这是一份面向机器学习初学者与中文NLP实践者的错别字检测与纠正项目资源,适用于课程设计、毕设选题及工程实训等场景,帮助学习者掌握文本预处理、特征建模与规则模型混合纠错的核心技术路径。资源包共11个文件,含3个核心Pyth…

2026/10/9 3:04:38

SSA+KAN+Transformer时序预测:三重校准实现可解释高精度

简介:本资源是一套面向时间序列预测任务的创新性深度学习方案,融合SSA麻雀优化算法、KAN(Kolmogorov–Arnold Network)可解释神经网络与Transformer时序建模能力,适用于中高级Python开发者及机器学习研究者开展时序回归…

2026/10/9 3:04:38

JWT+JWE构建跨系统安全数据透传:签名、加密与密钥轮换全解析

先说我为什么会对这个题目感兴趣。最近在做一个跨系统的数据对接项目,业务方提了一个很硬的要求:所有跨系统调用里涉及的敏感字段,不管走内网还是公网,都不能在任何一个中间环节出现明文,同时接收方必须能验证数据确实…

2026/10/9 3:04:38

SpringBoot家政服务平台毕设实战:从数据库设计到订单状态机

每年毕业季都有不少人带着类似的标题来找我——"JavaSpringBoot家政服务平台""家政服务管理平台Web版"。说实话,这类题目在计算机毕设里属于标准意义上的"稳妥选择":业务场景清晰、用户角色明确、技术栈主流,不…

2026/10/8 10:03:18

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/8 10:03:20

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 0:04:27

毕业论文初稿完成后首次进行AIGC疑似度自查的摸底与分流策略

毕业论文初稿完成后首次进行AIGC疑似度自查的摸底与分流策略当数万字的学位论文初稿经历开题、实验、问卷与多轮文献梳理最终成形时,绝大多数研究生都会面临一道全新的形式审查关卡:AIGC 疑似度排查。在高校毕业审核流程中,盲审前的文本检测通…

2026/10/9 0:04:27

食堂节能改造源头工厂,商用厨房设备焕新方案广受好评

商用厨房作为餐饮经营、单位供餐的核心后勤阵地,其设备配置、动线规划与运维体系直接决定后厨作业效率、运营成本与合规性。从基础的灶具、制冷存储设备,到油烟净化、水处理等配套系统,每一个环节的合理性都与食品安全、能耗管控、消防安全挂…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑