【动态规划】【背包】多重背包二进制优化(简单易懂)和【题解】——【洛谷P1776】宝物筛选
📅 2026/7/15 15:08:23
👁️ 次浏览
【动态规划】【背包】多重背包二进制优化简单易懂和【题解】【洛谷P1776】宝物筛选0.前言1.思路解析2.AC代码0.前言欠的债总是要还的。今天来把多重背包二进制优化补完。建议先食用【动态规划】【背包】多重背包模型讲解附C代码实现1.思路解析还是老样子动态规划五步走。好吧你们都很熟悉了那这里就只谈优化。先把原本的代码贴出来。#includebits/stdc.husingnamespacestd;#defineMAXM1010//m的数据范围可根据题目修改#defineMAXN1010//n的数据范围可根据题目修改//m表示背包的重量n表示物品的数量,dp[j]表示当前重量上限为j时的最大价值intm,n,dp[MAXM],cnt;structobject{intweight,value;//储存每个物品的重量和价值object(int_w0,int_v0):weight(_w),value(_v){};}a[MAXN];intmain(){scanf(%d%d,m,n);for(inti1;in;i){//输入n个物品intw,v,m;//存储当前物品的重量,价值和件数scanf(%d%d%d,w,v,m);for(intj1;jn;j)a[cnt]object(w,v);//展开}for(inti1;icnt;i)for(intjm;ja[i].weight;j--)//枚举所有能装下a[i]的重量dp[j]max(dp[j],dp[j-a[i].weight]a[i].value);printf(%d\n,dp[m]);return0;}看一下有哪里可以优化的。状态转移这已经是最朴素的01 背包 01背包01背包转移了。已经没有优化的余地了至少现在是。输入输出已经使用scanf,printf了也优化不了了。那该怎么办我们就只可以优化铺平了。可以发现如果直接暴力展平那么就会导致大量的重复计算。我们的目标就是将当前物品的个数m拆解成几个数并且能够表示0~m之间的所有数。什么意思呢比如m3可以拆成21就是现将两个物品打包成一个大物品它的价值和重量都是单个物品的2倍1同理就是单个的。或者m4可以拆解成31或211或者更多。需要找到一个符合上面描述的序列。那么我们就很容易联想到了二进制。我们拿9来举例。9的二进制形式是1001 1 ∗ 2 3 0 ∗ 2 2 0 ∗ 2 1 1 ∗ 2 0 8 1 10011*2^30*2^20*2^11*2^08110011∗230∗220∗211∗2081。那么我们可以先把9 99拆成4 2 1 421421剩下的先不动。那么如果加上4 44就代表二进制中从右往左第三位被选取了即100 2 100_21002否则就是没选取。其它的同理比如加上2 22就代表二进制中从右往左第二位被选取了即10 2 10_2102。又容易想到这样我们就能表示出0到7所有的数了。那还剩下2呢直接放进去不需要管了。为什么呢我们现在的问题就是要把剩下的8和9表示出来。很简单26不就等于8 88吗27不就等于9 99吗那么使用上面那个策略我们就成功的用几个数字表示出来0~m了。如果还是看不懂的同学可以自己尝试代数理解一下或者在评论区提出自己的疑惑哦。我会尽力为你解答。那么接下来就是如何编写代码的问题了。我们首先从1开始尝试每次*2来找到下一个二进制位对应的十进制数代码中使用位运算代替效率更快并从m中减掉放到a数组里面去。直到下一位需要的数比剩下的部分还大为止。如果有剩余的部分那么就直接放进去就行了关键代码如下for(intj1;jm;j1){// 二进制展开a[cnt]object(v*j,w*j);m-j;}if(m)a[cnt]object(v*m,w*m);// 还有剩下的这段代码的时间复杂度成功降到了O ( W log n ) O(W\log n)O(Wlogn)可以通过此题。2.AC代码#includebits/stdc.husingnamespacestd;#defineMAXN100010// m的数据范围可根据题目修改// cnt储存当前物品数量,dp[i]储存当前背包容量为j时的最大值intn,W,cnt1,dp[MAXN];structobject{// 储存每一个物品的信息intv,w;// 价值和重量object(int_v0,int_w0):v(_v),w(_w){}}a[MAXN];intmain(){cinnW;for(inti1;in;i){intv,w,m;cinvwm;for(intj1;jm;j1){// 二进制展开a[cnt]object(v*j,w*j);m-j;}if(m)a[cnt]object(v*m,w*m);// 还有剩下的}for(inti1;icnt;i)// 01背包for(intjW;ja[i].w;j--)dp[j]max(dp[j],dp[j-a[i].w]a[i].v);coutdp[W];return0;}最后制作不易希望大家多多点赞收藏关注下微信公众号谢谢大家的关注您的支持就是我更新的最大动力公众号上会及时提供信息学奥赛的相关资讯、各地科技特长生升学动态、还会提供相关比赛的备赛资料、信息学学习攻略等。
openEuler内核故障排查终极指南:10个常见问题与解决方案大全 【免费下载链接】kernel-cloudnative The openEuler kernel is the core of the openEuler OS, serving as the foundation of system performance and stability and a bridge between processors, devi…
📅 2026/7/15 15:08:23
随着现代城市化进程的加速,人们的生活水平不断提高,对健康与运动的需求也日益增长。体育馆作为城市体育设施的重要组成部分,其日常管理和运营面临着越来越多的挑战。传统的体育馆管理方式往往依赖于人工记录和调度,这种方式不仅效…
📅 2026/7/15 15:08:23
长期 Agent 记忆不是 RAG,而是要能维护证据、版本和生命周期的数据系统。 Agent 的记忆能力很容易被做成一个轻量 RAG:把历史消息切块、生成 embedding、写进向量库,提问时召回 Top-K,再塞回 prompt。这个方案适合 MVP,…
📅 2026/7/15 15:08:23
终极免费离线绘图工具:如何在5分钟内掌握draw.io桌面版的完整使用技巧 【免费下载链接】drawio-desktop Official electron build of draw.io 项目地址: https://gitcode.com/GitHub_Trending/dr/drawio-desktop
想象一下,你正在咖啡馆赶制一份重…
📅 2026/7/15 15:58:04
在供水系统中,不锈钢水箱的重要性不言而喻。无论是家用储水还是工业用水,一个质量过硬的水箱能避免漏水、锈蚀、二次污染等诸多麻烦。但市面上的品牌林林总总,参数天花乱坠,普通用户很容易被低价和宣传话术迷惑。作为一名长期关注…
📅 2026/7/15 15:58:04
5分钟快速上手HDTF:高分辨率说话人脸生成完整指南 【免费下载链接】HDTF the dataset and code for "Flow-guided One-shot Talking Face Generation with a High-resolution Audio-visual Dataset" 项目地址: https://gitcode.com/gh_mirrors/hd/HDTF …
📅 2026/7/15 15:58:04
知识库 App 的 ProfilePage 不是传统的"设置页"——它更像一个"知识概览仪表盘",用标签云展示知识分布、用统计卡片量化笔记成果、用渐变头像强化品牌感。这种"个人中心 数据可视化"的设计在工具类 App 里越来越常见。
完整效果一、…
📅 2026/7/15 15:58:04
知识库 App 的 TagFilterPage 有两种完全不同的 UI 状态——没有选中标签时显示标签网格,选中后切换为笔记列表。这种"同一页面两种视图"的设计让用户不需要跳转就能在"浏览标签"和"查看笔记"之间切换,减少了页面跳转的开…
📅 2026/7/15 15:58:04
BM71 最长上升子序列(一)描述给定一个长度为 n 的数组 arr,求它的最长严格上升子序列的长度。所谓子序列,指一个数组删掉一些数(也可以不删)之后,形成的新数组。例如 [1,5,3,7,3] 数组,其子序列有ÿ…
📅 2026/7/15 15:57:03
1. COM线程模型基础与CoInitializeEx核心作用在Windows平台开发中,组件对象模型(COM)的线程处理机制一直是开发者必须掌握的底层知识。作为COM初始化的门户函数,CoInitializeEx不仅决定了对象在何种线程环境下运行,更影响着整个组件的并发性能…
📅 2026/7/15 0:00:17
1. 为什么M芯片Mac用户需要降级到Monterey? 去年刚拿到M2芯片的MacBook Pro时,我第一时间升级到了Ventura系统。结果第三天就遇到了微信闪退、Final Cut Pro渲染卡顿的问题。后来在开发者论坛发现,不少专业软件对Ventura的适配都存在问题。这…
📅 2026/7/15 0:00:17
1. 背景与核心概念在AI大模型快速发展的今天,许多开发者和研究者都面临一个现实问题:如何在有限的硬件预算下实现高效的本地大模型部署。特别是对于个人开发者和小型团队来说,购买最新的高端显卡成本高昂,而利用现有的或二手硬件资…
📅 2026/7/15 0:00:17
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/14 6:35:02
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/14 12:06:52
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/15 14:09:20
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/14 15:11:56
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/15 2:24:18
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/14 15:11:56