动态规划专练:卡码网第52题-携带研究材料
1.本题是第一次遇到完全背包的动态规划问题与01背包问题相比最大的不同就是每一个物品的数量从1变为了无穷。完全背包问题可以使用二维dp数组更加直观易懂。行为物品列为最大重量元素值为最大价值。递推公式的结构与01背包的一样不同点在于如果选择放该物品要从本行寻找减去该物品重量的元素值而不是去上一行寻找原因在于物品没有数量限制剩余的空间不是从“没考虑当前物品”的上一层省出来的而是从“可能已经放过当前物品”的本层省出来的。递推公式为dp[i][j] fmax(dp[i - 1][j], dp[i][j - weight[i]] val[i])。2.基于以上思想可写出完整代码如下1. #include stdio.h 2. #include math.h 3. #include string.h 4. 5. int main(){ 6. // num物品数量max_weight背包最大承重 7. int num, max_weight; 8. scanf(%d %d, num, max_weight); 9. 10. // weight[i]第i件物品重量val[i]第i件物品价值 11. int weight[num], val[num]; 12. memset(weight, 0, sizeof(weight)); 13. memset(val, 0, sizeof(val)); 14. for (int i 0; i num; i){ 15. scanf(%d %d, weight[i], val[i]); 16. } 17. 18. // dp[i][j]前i件物品背包容量j时的最大价值完全背包二维数组 19. int dp[num][max_weight 1]; 20. for (int i 0; i num; i){ 21. memset(dp[i], 0, sizeof(dp[i])); 22. } 23. // 初始化第一件物品完全背包同一物品可多次选取 24. for (int i weight[0]; i max_weight; i){ 25. dp[0][i] dp[0][i - weight[0]] val[0]; 26. } 27. 28. // 遍历剩余物品 29. for (int i 1; i num; i){ 30. // 从小到大遍历容量允许重复选取当前物品完全背包核心 31. for (int j 0; j max_weight; j){ 32. if (j weight[i]){ 33. // 装不下继承前i-1件的最优解 34. dp[i][j] dp[i - 1][j]; 35. } else { 36. // 二选一不选当前物品 / 重复选当前物品 37. dp[i][j] fmax(dp[i - 1][j], dp[i][j - weight[i]] val[i]); 38. } 39. } 40. } 41. 42. // 输出全部物品、背包满承重的最大价值 43. printf(%d, dp[num - 1][max_weight]); 44. 45. return 0; 46. }该算法时间复杂度和空间复杂度均为O(num * max_weight)。3.完全背包问题同样可以使用一维动态dp数组与01背包相比唯一不同点在于完全背包的内层循环是正序而01背包是逆序。01背包逆序是因为物品数量只有1个需要防止物品被多次选取而完全背包的物品数量是无限个所以需要正序来保证物品能被多次选取。相当于物品数量的特点决定了使用哪种遍历顺序。4.基于以上思想可写出完整代码如下1. #include stdio.h 2. #include math.h 3. #include string.h 4. 5. int main(){ 6. // num物品种类数max_weight背包最大载重 7. int num, max_weight; 8. scanf(%d %d, num, max_weight); 9. 10. // weight数组存每种物品重量val数组存每种物品价值 11. int weight[num], val[num]; 12. memset(weight, 0, sizeof(weight)); 13. memset(val, 0, sizeof(val)); 14. for (int i 0; i num; i){ 15. scanf(%d %d, weight[i], val[i]); 16. } 17. 18. // dp[j]容量为j的背包可装入的最大价值 19. int dp[max_weight 1]; 20. memset(dp, 0, sizeof(dp)); 21. 22. // 完全背包一维优化物品可无限取用 23. for (int i 0; i num; i){ 24. // 容量正序遍历允许重复选取当前物品 25. for (int j weight[i]; j max_weight; j){ 26. // 不选当前物品dp[j] / 选当前物品dp[j-weight[i]]val[i]取更大值 27. dp[j] fmax(dp[j], dp[j - weight[i]] val[i]); 28. } 29. } 30. 31. // 输出满载背包的最大价值 32. printf(%d, dp[max_weight]); 33. 34. return 0; 35. }该算法时间复杂度为O(num * max_weight)空间复杂度均O(max_weight)。5.在使用一维动态dp数组时对于01背包问题由于最后两层for循环的的内层循环时逆序的所以两层for循环不能换位置否则会引起逻辑错乱而完全背包问题因为两层都是正序的两层for循环可以互换位置。

相关新闻

XSS实战:绕过过滤的payload变形技巧与防御策略

XSS实战:绕过过滤的payload变形技巧与防御策略

1. 项目概述&#xff1a;从“能弹窗”到“能实战”的跨越 很多刚接触Web安全的朋友&#xff0c;对XSS&#xff08;跨站脚本攻击&#xff09;的理解可能还停留在“在输入框里敲个 <script>alert(1)</script> &#xff0c;然后看能不能弹窗”的阶段。一旦弹窗成功&…

2026/8/8 8:48:37 阅读更多 →
Java与Python中特殊字符处理实战:编码、存储与传输

Java与Python中特殊字符处理实战:编码、存储与传输

在实际开发中&#xff0c;我们经常需要处理一些来自外部系统、用户输入或网络请求的字符串数据&#xff0c;这些数据可能包含一些非标准的、特殊的或难以直接处理的字符。例如&#xff0c;一个游戏角色或动漫角色的名字&#xff0c;如“芙兰朵露斯卡雷霆”&#xff0c;其中包含…

2026/8/8 8:48:37 阅读更多 →
SpringBoot整合MinIO:从基础配置到生产级对象存储实践

SpringBoot整合MinIO:从基础配置到生产级对象存储实践

1. 为什么说“看这一篇就够了”&#xff1a;从需求到选型的深度思考 如果你正在为一个Java项目寻找一个可靠、高性能且易于集成的对象存储方案&#xff0c;并且这个项目恰好基于SpringBoot&#xff0c;那么“SpringBoot整合MinIO”这个组合大概率已经进入了你的视野。网上相关的…

2026/8/8 8:48:37 阅读更多 →

最新新闻

大模型长对话记忆管理:分层架构设计与工程实践

大模型长对话记忆管理:分层架构设计与工程实践

1. 项目概述&#xff1a;当大模型对话遇上“健忘症”最近在准备大模型应用架构相关的面试&#xff0c;看到一个挺有意思的题目&#xff0c;大意是&#xff1a;给你一个上下文窗口只有8K Token的模型&#xff0c;如何设计一个记忆系统&#xff0c;让它能支撑长达100轮的连续对话…

2026/8/8 16:45:55 阅读更多 →
Meta Quest MR开发实战:WebCamTexture权限申请与图像处理全解析

Meta Quest MR开发实战:WebCamTexture权限申请与图像处理全解析

1. 项目概述&#xff1a;为什么要在Meta Quest MR开发中关注WebCamTexture&#xff1f; 如果你正在为Meta Quest系列设备&#xff08;比如Quest 2、Quest 3或Quest Pro&#xff09;开发混合现实应用&#xff0c;那么“如何看到真实世界”就是你绕不开的第一个核心问题。虽然Uni…

2026/8/8 16:45:55 阅读更多 →
初学者必看:LFM2.5-2.6B-5bit模型prompt工程指南,3个技巧让文本生成效果翻倍

初学者必看:LFM2.5-2.6B-5bit模型prompt工程指南,3个技巧让文本生成效果翻倍

Varlet 组件库主题切换 API&#xff1a;编程式控制主题的完整指南 【免费下载链接】varlet Material design mobile component library for Vue3 项目地址: https://gitcode.com/gh_mirrors/va/varlet Varlet 是一款基于 Vue3 的 Material Design 移动端组件库&#xff…

2026/8/8 16:45:55 阅读更多 →
微信批量消息发送工具:5分钟掌握Windows端高效群发技巧

微信批量消息发送工具:5分钟掌握Windows端高效群发技巧

微信批量消息发送工具&#xff1a;5分钟掌握Windows端高效群发技巧 【免费下载链接】WeChat-mass-msg 微信自动发送信息&#xff0c;微信群发消息&#xff0c;Windows系统微信客户端&#xff08;PC端 项目地址: https://gitcode.com/gh_mirrors/we/WeChat-mass-msg WeCh…

2026/8/8 16:45:55 阅读更多 →
无刷电机驱动电路全解析:从分立元件到FOC矢量控制的五种实用方案

无刷电机驱动电路全解析:从分立元件到FOC矢量控制的五种实用方案

1. 项目概述&#xff1a;从“会转”到“转得好”的驱动艺术 搞过机器人、无人机或者自制小电器的朋友&#xff0c;对无刷马达肯定不陌生。这玩意儿效率高、寿命长、扭矩特性好&#xff0c;早就成了各种移动平台和精密设备的心脏。但心脏有了&#xff0c;怎么让它听话地跳动&…

2026/8/8 16:44:54 阅读更多 →
大数运算核心原理与实现:从溢出问题到高精度计算实战

大数运算核心原理与实现:从溢出问题到高精度计算实战

1. 项目概述&#xff1a;当数字溢出你的“内存” 做开发的朋友&#xff0c;尤其是搞算法、密码学或者金融计算的&#xff0c;肯定都遇到过这个场景&#xff1a;你信心满满地写了个程序&#xff0c;输入两个看起来不大的数字&#xff0c;比如 12345678901234567890 和 987654…

2026/8/8 16:44:54 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及&#xff0c;无数企业下场搭建智能体系统&#xff0c;可落地阶段难题接踵而至&#xff1a;上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节&#xff0c;空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南&#xff1a;用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代&#xff0c;二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起&#xff1a;为什么我们需要一个隐私保护通用组件&#xff1f;最近在维护一个基于uniapp开发的微信小程序矩阵时&#xff0c;我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格&#xff0c;几乎每一个新版本发布&#xff0c;或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流&#xff1a;一个核心问题的诞生想象一下&#xff0c;你是一个城市供水系统的总工程师。你的城市有多个水源&#xff08;水库&#xff09;&#xff0c;需要通过一个复杂的地下管道网络&#xff0c;将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/8 8:58:26 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起&#xff1a;为什么我们需要互相关几年前&#xff0c;我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号&#xff0c;理论上它们接收到的声音波形应该非常相似&#xff0c;只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →