P1049 [NOIP2001 普及组] 装箱问题 题解

【算法学习】01背包问题 01背包问题 相当于还是求n个物品的组合! 暴力解法: 每一件物品,都可以放进背包,也可以不放进。复杂度是O( (2^n) * n ), 对于每一个组合,还要看看对应的总重是多少,看看是不是超过了容量C,从而看价值。 组合方式都可以用递归的方式来求解。只是是能不能找到重叠子问题、最优子结构,从而转换为DP。 设计: 状态:之前状态都使用一个参数就解决了问题,通常问题中参数的个数意味着要解决问题需... 阅读详情

题目描述

有一个箱子容量为 V,同时有 n 个物品,每个物品有一个体积。现在从 n 个物品中,任取若干个装入箱内(也可以不取),使箱子的剩余空间最小。输出这个最小值。

做法一:搜索

枚举n个物品选和不选的情况,搜完每次搜到最后记录最小答案,详见代码。

代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,a[1000005],ans=1e9;
//i代表搜到了第i件物品,v代表当前剩余容量
void dfs(int i,int v){
   //如果搜到了n+1,则记录答案
   if(i==n+1){
   	ans=min(ans,v);//记录最小值
   	return;
   }else{
   	//枚举每一种情况
 		if(v>=a[i]){
        //如果剩余容量够装第i件物品时就装
   		dfs(i+1,v-a[i]);
   	}
    //剩余容量够和不够都要枚举一次不装的情况
   	dfs(i+1,v);
   }
}
int main(){
   cin>>m>>n;
   for(int i=1;i<=n;i++) cin>>a[i];
   dfs(1,m);
   //输出答案
  cout<<ans;
}

做法二:动态规划

因此,我们来看一看如何用动态规划解决此题:

因为每个物体,都有装与不装两种选择,所以我们得到状态转移方程:

dp[j]=max(dp[j],dp[j-a[i]]+a[i])

f[j] 为:当总容量为 j 时,不放第 i 件物品,所能装的最大体积。

f[j-w[i]]+w[i] 为:当总容量为 j 时,放了第 i 件物品后,所能装的最大体积。(即 j减去第 i 件物品体积 的容量能装的最大体积+第 i 件物品的体积。w[i] 为第 i 件物品体积)

代码:
#include<bits/stdc++.h>
using namespace std;
int dp[20005],a[35],m,n;
int main(){
    cin>>m>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++)
        for(int j=m;j>=a[i];j--)
            dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
    cout<<m-dp[m];
    return 0;
}

求赞! 

动态规划总结三01背包问题 01背包问题一般是利用动态规划进行解题的,这里通过leetcode1049来讲解01背包的解题思路以及如何对01背包应用题目转换和理清思路 01背包问题: 这里借用学习公众号代码随想录的一张图来说明背包问题的种类 对于面试的话,其实掌握01背包,和完全背包,就够用了,最多可以再来一个多重背包。 首先来看01背包问题的描述 有N件物品和一个最多能被重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 对于这种 阅读详情

相关推荐

背包问题

01背包问题 时间复杂度O(n*v),空间复杂度O(v) 其中n是物品个数,v是背包大小。 (x, y) 表示物品大小为x,价值为y 设置状态dpij,表示考虑到前i个物品用大小为j的背包所能装的最大价值 A. 考虑第i个物品可以不要这个物品。dpij = dpi-1j 比如已经用(1, 2)(1, 3)两个物品装进背包,那么此时背包大小为2的时候我们最大价值为5。 现在考虑第三个物品(2,4)...

Alex Panda的博客 601

P1049 [NOIP2001 普及组] 装箱问题(dp)C/C++

P1049 [NOIP2001 普及组] 装箱问题 因为每个物体,都有装与不装两种选择,所以我们得到状态转移方程: f[j]=max(f[j],f[j-w[i]]+w[i]); f[j] 为:当总容量为 j 时,不放第 i 件物品,所能装的最大体积。 f[j-w[i]]+w[i] 为:当总容量为 j 时,放了第 i 件物品后,所能装的最大体积。(即 j减去第 i 件物品体积 的容量能装的最大体积+第 i 件物品的体积。w[i] 为第 i 件物品体积) #include<iostream> #i

深巷 2252

【题解-洛谷】P1049 [NOIP 2001 普及组] 装箱问题

有一个箱子容量为V,同时有n个物品,每个物品有一个体积。现在从n个物品中,任取若干个装入箱内(也可以不取),使箱子的剩余空间最小。输出这个最小值。

写代码的犄角旮瘩 742

动态规划(五)——背包问题

问题 背包问题的变体很多,这里主要分析三个类型:0-1背包,完全背包和多重背包。 0-1背包 问题 有n件物品,每件物品有各自的重量和价值,现有一个一定容量的背包,问如何选择使背包物品价值最大 分析 最基础的方法是枚举,但时间复杂度为O(22)O(2^2)O(22) 动态规划的可以将时间复杂度降为O(nm)O(nm)O(nm) 设置一个二维数组dp[][],令dp[i][j]表示前i个物品装进容量为j的背包能获得的最大价值,则dp[n][m]就是问题的解 对于容量为j的背包,如果不放入第i件物品,那么这

牧空的博客 3539

DP系列2【01背包】洛谷 P1049 [NOIP 2001 普及组] 装箱问题题解

本文介绍了如何解决装箱问题:给定容量为V的箱子和n个物品,每个物品有固定体积,要求选择若干物品装入箱子,使剩余空间最小。通过动态规划方法,定义数组dp[i]表示容量i时能装入的最大体积,使用状态转移方程dp[i] = max(dp[i], dp[i-w[j]]+w[j])进行求解。算法遍历所有物品,逆向更新dp数组,最终最小剩余空间为V-dp[V]。该问题采用01背包思想,时间复杂度O(nV),适用于小规模数据(n≤30,V≤20000)。代码实现展示了C++解法,核心是两层循环完成动态规划过程。

djy2024的博客 1221

题解:洛谷 P1049 [NOIP 2001 普及组] 装箱问题

等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。个物品中,任取若干个装入箱内(也可以不取),使箱子的剩余空间为最小。个物品,每个物品有一个体积(正整数)。共一行一个整数,表示箱子最小剩余空间。行,每行一个正整数,表示第。#普及-# #01背包#本文分享的必刷题目是从。

团爸讲算法 716

P1049 [NOIP 2001 普及组] 装箱问题の题解

洛谷P1049题解

2409_89797769的博客 1092

OsgEarth实战:飞机模型动态轨迹与雷达扫描效果实现详解

本文详细介绍了如何使用OsgEarth实现飞机模型动态轨迹与雷达扫描效果。通过实战案例,讲解了模型加载、路径规划、动态轨迹绘制、飞行姿态计算以及雷达扫描效果的实现方法,并提供了性能优化技巧,帮助开发者高效完成三维可视化项目开发。

weixin_29214199的博客 303

洛谷P1049[NOIP2001 普及组] 装箱问题题解

对于 100%100% 数据,满足 0

weixin_42178241的博客 585

双有源桥DC-DC变换器:原理、软开关与移相控制深度解析

隔离型DC-DC变换器是电力电子系统的核心部件,通过高频变压器实现电气隔离与电压匹配,保障系统安全与灵活适配。其工作原理基于功率半导体器件的开关动作,通过调制策略控制能量传输。该技术的核心价值在于实现高效、高功率密度的电能转换,并支持双向能量流动,这对于提升系统整体能效和运行灵活性至关重要。在新能源储能、电动汽车V2G及数据中心供电等场景中,双向能量流成为刚性需求,推动了如双有源桥等先进拓扑的应用。本文聚焦于双有源桥这一实现高效双向隔离变换的“明星”方案,深入剖析其利用移相控制实现软开关的机理。通过分析谐振

weixin_34195142的博客 378

ACPWorkbench_for_BP10

ADC支持9种采样率:8000Hz、11025Hz、12000Hz、16000Hz、22050Hz、24000Hz、32000Hz、44100Hz 以及 48000Hz。选择5种MCLK源时, 模块内部的MCLK源无效。I2S 采样率支持:8K,11.025K,12K,16K, 22.05K, 24K, 32K, 44.1K, 48K, 88.2K, 96K, 176.4K 和 192K。DAC采样率支持:8K,11.025K,12K,16K,22.05K, 24K, 32K, 44.1K和48K。

dddds222_的博客 4548

【洛谷 P1049】[NOIP2001 普及组] 装箱问题 题解(动态规划+01背包)

有一个箱子容量为V,同时有n个物品,每个物品有一个体积。现在从n个物品中,任取若干个装入箱内(也可以不取),使箱子的剩余空间最小。输出这个最小值。

HEX9CF的技术博客 1558

matlab液体湿润模拟,【水文模型】01 三水源新安江模型

目录一、概述1.1 流域概况1.2 产流方式论证1.3 设计基本任务1.4 设计原始资料二、新安江模型2.1 流域划分2.2 产汇流计算2.2.1 蒸散发计算2.2.2 产流计算2.2.3 水源划分2.2.4 汇流计算2.3 模型参数2.3.1 参数物理意义2.3.2 参数率定结果2.4 模拟结果2.4.1 精度统计表2.4.2 计算与实测流量过程线比较三、精度统计与误差分析3.1 精度统计3.2...

weixin_34173656的博客 5327

洛谷:P1049 [NOIP 2001 普及组] 装箱问题 Java题解

题目要求我们在给定的箱子容量下,选择若干物品装入箱子,使得箱子的剩余空间最小。这是一个典型的0-1背包问题,可以使用动态规划来解决。该解法能够高效处理题目给定的数据规模(n ≤ 30,V ≤ 20000)。对于更大的数据规模,可以考虑进一步优化或使用其他算法。:O(n×V),其中n是物品数量,V是箱子容量。:O(n×V),使用二维数组存储状态。

Java爱好者,热爱分享,信仰开源! 282

SAP 消息号T-CODE

SAP消息号修改汇总 确实有很多消息是可以修改的 FI: oBA5|oFMG|oFPM MM: oMRM|oKZZ|oMT4|oMCQ|o04C| SD: oVAH(V4)|oVM1(VL) CO:  oPR4_ACT|oPR4_CK|oPR4_CKML|oPR4_CKPF|oPR4_KKA|oPR4_KKP|oPR4_KKS| oPR4_KKS1|oPR4_P

heng0757的专栏 1万+

逆强化学习:从专家示范中学习策略

逆强化学习(Inverse Reinforcement Learning,简称IRL)是强化学习(Reinforcement Learning,简称RL)的一个子领域,它的目标是从专家的行为中学习策略。在传统的强化学习中,智能体通过与环境交互,根据奖励信号来学习一个策略。而在逆强化学习中,我们没有直接的奖励信号,而是通过观察专家的行为来推断出奖励函数,从而学习到一个与专家类似的策略。逆强化学习作为强化学习的一个重要子领域,在许多实际应用场景中都取得了显著的成功。

AI天才研究院 1447

(洛谷)题目题号P1049 [NOIP2001 普及组] 装箱问题#题解

Hello大家好我是小亦今天又是来写了来自NOIP的2001普及组题目,难度为普及-,其实这道题呢挺简单的但是看着正确率却不高啊qwq,话不多说今天呢我来跟大家来一一分析这道题的思路与代码都会提供哈~其实在我看来是一个非常经典的动态规划问题,通常称为“装箱问题”或“背包问题的变种”。

C++老手 506

华为OD新系统机试真题 - 准备生日礼物(Py/Java/C/C++/Js/Go)

华为OD机试新系统真题 4.8【准备生日礼物】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【准备生日礼物】

qq_45776114的博客 1478

洛谷 P1049 [NOIP2001 普及组] 装箱问题 题解(动规)

洛谷 P1049 [NOIP2001 普及组] 装箱问题 题解

f2568ryghi的博客 729

【WRFDA教程第四期】雷达数据同化(Radar Data Assimilation)

雷达数据同化(Radar Data Assimilation)

WW、forever的博客 1758

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

洛谷P1049 [NOIP2001 普及组] 装箱问题,全网最详细的JAVA题解

洛谷P1049 [NOIP2001 普及组] 装箱问题,全网最详细的JAVA题解

qq_46237746的博客 893

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

洛谷P1049 [NOIP2001 普及组] 装箱问题 题解

用到01背包+递归+深搜 #include <bits/stdc++.h> using namespace std; int ans = INT_MAX,v, n, a[10005], l;//设answer(ans)大点,以防剩下的都>answer void zx(int dep, int r) { if(r < 0) { return; } if(dep > n)//都选完了 { ans = min(ans, r);//如果当前结果小于目前步数,则answ

_lzx_的博客 884

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【C++ 真题】P1049 [NOIP 2001 普及组] 装箱问题

有一个箱子容量为V,同时有n个物品,每个物品有一个体积。现在从n个物品中,任取若干个装入箱内(也可以不取),使箱子的剩余空间最小。输出这个最小值。

Ω 742
下一篇: P1656 炸铁路 题解
灶龙
博客等级 码龄4年 126粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值