首页 > 其他分享 >[NOIP2001 普及组] 装箱问题

[NOIP2001 普及组] 装箱问题

时间:2023-05-30 21:23:48浏览次数:66  
标签:箱子 普及 le NOIP2001 int 重量 样例 物品 装箱

[NOIP2001 普及组] 装箱问题

题目描述

有一个箱子容量为 \(V\),同时有 \(n\) 个物品,每个物品有一个体积。

现在从 \(n\) 个物品中,任取若干个装入箱内(也可以不取),使箱子的剩余空间最小。输出这个最小值。

输入格式

第一行共一个整数 \(V\),表示箱子容量。

第二行共一个整数 \(n\),表示物品总数。

接下来 \(n\) 行,每行有一个正整数,表示第 \(i\) 个物品的体积。

输出格式

  • 共一行一个整数,表示箱子最小剩余空间。

样例 #1

样例输入 #1

24
6
8
3
12
7
9
7

样例输出 #1

0

提示

对于 \(100\%\) 数据,满足 \(0<n \le 30\),\(1 \le V \le 20000\)。

解析&Code

题目要求求出最小的剩余空间,也就是要求出最大的可装重量

这样,我们可以将一个物体的重量当作它的价值,进而将题目转变为一个基本的01背包问题:

有一个箱子容量为V(正整数,\(0 \le V \le 20000\)),同时有n个物品(\(0 < n \le 30\)),每个物品有一个体积(正整数)和一个价值(等于体积)。

要求n个物品中,任取若干个装入箱内,使总价值最大。

对于每一个物体,都有两种状态:\(装\) 与 \(不装\)

那么,对于任意重量m的最大价值 f (m) = max ( f ( m - w[i] ) + w[i], f (m) )(w为重量(即价值))

其中,f ( m - w[i] ) 指在装了物品i后,箱子的剩余容量能装的最大重量

f ( m - w[i] ) + w[i] 指在在装了物品i后,箱子能装的最大重量

∴代码为:

#include <bits/stdc++.h>
using namespace std;
int f[20010],w[40];
int main()
{
	int v,n;
	cin >> v >> n;
	for(int i=1;i<=n;i++)
	{
		cin >> w[i];
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=v;j>=w[i];j--)
		{    
			if(f[j]<f[j-w[i]]+w[i])
			{
				f[j]=f[j-w[i]]+w[i];
			}
		}
	}
	cout << v-f[v];
}

标签:箱子,普及,le,NOIP2001,int,重量,样例,物品,装箱
From: https://www.cnblogs.com/momotrace/p/p1049.html

相关文章

  • CodeStar2023年春第9周周赛普及进阶组
    T1:奇怪的银行可以直接把\(1,6^p,9^p\)当做物品大小,跑一遍完全背包。时间复杂度为\(\mathcal{O}(n\logn)\)记dp[i][j]表示前\(i\)种面值恰好凑出\(j\)元的最少张数转移:\[dp[i][j]=\min(dp[i-1][j],dp[i][j-w_i]+1)\]代码实现#include<bits/stdc++.h>#defin......
  • [NOIP2006 普及组] 开心的金明
    [NOIP2006普及组]开心的金明题目描述金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过\(N\)元钱就行”。今天一早金明就开始做预算,但是他想买的东西太多了......
  • [NOIP2004 普及组] 火星人
    题目简单,A完之后看题解,看到大佬的一片题解有感而发,这位大佬的DFS确实精妙看完题之后你会发现只需要5行就可以解决,c++自带的全排列函数,但是有位大佬手写DFS的方法非常巧妙,直接精确定位,让我对dfs的理解多多少少又加深一层题目描述人类终于登上了火星的土地并且见到了神秘......
  • Freespire开发团队近日宣布了Freespire 9.5的发布和普及
    Freespire开发团队近日宣布了Freespire9.5的发布和普及,这是这个基于Ubuntu的发行版的最新稳定版本,主要针对那些想从Windows转向Linux的人。基于Ubuntu22.04LTS(JammyJellyfish),Freespire9.5(代号为BlackBalloon)版本为其默认的GNOME42.5桌面环境配备了漂亮的暗色外观,并......
  • Freespire开发团队近日宣布了Freespire 9.5的发布和普及
    Freespire开发团队近日宣布了Freespire9.5的发布和普及,这是这个基于Ubuntu的发行版的最新稳定版本,主要针对那些想从Windows转向Linux的人。基于Ubuntu22.04LTS(JammyJellyfish),Freespire9.5(代号为BlackBalloon)版本为其默认的GNOME42.5桌面环境配备了漂亮的暗色外观,并......
  • Freespire开发团队近日宣布了Freespire 9.5的发布和普及
    Freespire开发团队近日宣布了Freespire9.5的发布和普及,这是这个基于Ubuntu的发行版的最新稳定版本,主要针对那些想从Windows转向Linux的人。基于Ubuntu22.04LTS(JammyJellyfish),Freespire9.5(代号为BlackBalloon)版本为其默认的GNOME42.5桌面环境配备了漂亮的暗色外观,并......
  • NOIP2014普及组试题题解
    1.珠心算测验代码:#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintN=2e4+39+7;intmp[N],n,a[N],ans=0;intmain(){ cin>>n; for(inti=1;i<=n;i++)cin>>a[i]; for(inti=1;i<=n;i++){ for(intj=1;j<=n;j++)......
  • 三维装箱决策问题
    1.三维装箱决策问题三维装箱问题即研究如何用最少数量的箱子将物品装起来。其描述如下:可以看出,问题从计算最少容器数量变为能否用一定数量的容器能够装下。解决该问题,只需要解答出是,或者否即可。2.三维装箱决策问题分析三维装箱决策问题是NP-Complete问题。此类问题能够在多......
  • TPSO-DSDT粒子群算法在三维装箱问题上的应用
    组合算法是将传统启发式算法与数学规划算法结合元启发式算法共同工作进行相应的计算,还有融合多种算法所获得的计算方法,结合了所有算法自身的有点,规避其自身缺点从而达到解决装箱问题的最终目的。现在,组合算法的整体规划绝大多数都是通过启发式算法完成的,局部优化的过程采用的是人......
  • 启发式算法在三维装箱问题上的应用
    启发式算法的出现时间比较难以确定,因为很多算法的提出都是在不同的领域和不同的时间段内,而且随着时间的推移,这些算法也在不断地完善和发展。以下是一些比较有代表性的启发式算法及其出现时间:1953年,模拟退火算法(SimulatedAnnealing,SA)模拟退火算法是一种基于固体物理学中固体退火......