装箱问题(DP)

2023-05-16

题目描述

有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。

要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。

输入

第一行为一个整数,表示箱子容量;

第二行为一个整数,表示有n个物品;

接下来n行,每行一个整数表示这n个物品的各自体积。

输出

一个整数,表示箱子剩余空间。

样例输入

24

 6

 8

 3

 12

 7

 9

 7

样例输出

0

 

  1. 这个题目运用到了dp(动态规划)。
  2. 我们首先需要开辟一个大小比v大一点的数组dp,这个数组用来模拟放置物品。
  3. 我们每一次得到要放进去的容量,从dp数组最后一个下标就也是v开始模拟,也就是j=v,是v是因为,我们最多放置v那么大的容量。
  4. 然后往前推算,这个box[i]到底放不放。推算结束条件是什么?就是我们前一次放的那个下标不能是小于0的,也就是j>=box[i]
  5. 前一次记录结果是存在dp[j-box[i]]中的(如果我们要拿这个box[i],我们就得看当容量为dp[j-box[i]]时取得的最优解),如果这个值加上box[i]的值,那么我就就拿这个box[i],否则就保持原来的值(就是一个拿和不拿问题)。
  6. 在我们重复5这个动作的时候,我们最终能保证dp[v]就是最大能拿的容量,那么v-dp[v]就是最小剩余的容量。

代码如下:

#include<stdio.h>
int dp[20005];//表示容积为v时可放置物品的容量
int max(int a,int b)
{
	if(a>=b) return a;
	return b;
}
int main()
{
	int v,n,i,j;
	scanf("%d%d",&v,&n);
	int box[40] = {0};
	for(i = 0;i<n;i++)
	{
		scanf("%d",&box[i]);
	}
	
	for(i = 0;i < n; i++)
	{
		//每一个试着判断放进去
		for(j = v ;j >= box[i]; j--)
		{
			dp[j] = max(dp[j],dp[j-box[i]] + box[i]);//每次贪心放不放下这个box[i],每次都要保证时最优解,也就是最大能拿的。
		//每次都从v往前面贪心,j-box[i]是在查看如果我们要放进去,那么剩下的容量的最优解
		//如果放进去比本来大,就放进去,否则不放
		
		}
	}
	printf("%d",v-dp[v]);//dp[v]这个元素会记下最终贪心的结果
	
	return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

装箱问题(DP) 的相关文章

  • 如何将CentOS Stream退回为CentOS 8.5

    CentOS 8 已于 2021 年年底正式停止维护 xff0c 因业务需要 xff0c 老大说 xff0c 换Steam吧 xff0c 后面环境有问题果然反悔了 xff0c 哈哈 xff0c 怎么办 xff0c 没降级工具哦 xff0c
  • 详解:什么是VXLAN?

    本文介绍了什么是VXLAN xff0c 以及VXLAN的基本概念和工作原理 什么是VXLAN VXLAN xff08 Virtual eXtensible Local Area Network xff0c 虚拟扩展局域网 xff09 xff
  • windows2022远程桌面连接管理员已结束会话解决方法

    您的远程桌面会话已结束 您的远程桌面会话已结束 可能是下列原因之一 管理员已结束了会话 在建立连接时发生错误 发生网络问题 今天有台服务器连不上 xff0c 提示这个 百思不得其解 后面问了 xff0c 原来这台机子装了BT面板 xff0c
  • 樱花大战常见问题解答

    樱花大战1 请使用免CD补丁 还有windows98兼容性 安装目录名字只能用英文 不可以用手柄 使用免CD补丁 还有windows98兼容性可以在XP系统下运行 右键点击樱花大战的启动程序 xff0c 然后 属性 xff0d 兼容性 xf
  • 【小白注意】Windows XP 大胆拥抱Linux系统所遇到的问题

    Windows XP到4月8日就不再有微软的官方技术支持了 xff0c 尽管你仍然可以继续用 xff0c 但是用起来的风险就大多了 xff0c 一不留神就可能被黑客入侵 似乎 xff0c Linux也是一个不错的选择 也许很多文章开始教你如
  • RapeLay(电车之狼R)的结局介绍 (隐藏结局攻略)

    RapeLay xff08 电车之狼R xff09 的结局介绍 隐藏结局 必备知识要让MM怀孕很简单 起初刚进入调教模式后 只要H一次 MM就开始有时期状态 生理 连上有红晕 gt 不详状态 闭目第一次 gt 危险状态 闭目第二 次 只要在
  • 海茶3 らぶデス3 入门经典教程

    又一次在百忙之中给大家写教程了 真的很忙啊 xff0c 4个汉化组 61 1个程序坑 43 1个润色坑 43 2个翻译坑 所以本文第一句话就是 xff1a 这么简单的游戏要什么教程 xff0c 不算LOADGAME xff0c 10分钟上手
  • GALGAME文字提取agth 特殊码大全(特殊码表)和使用方法

    NOTE Make sure you are using the latest version of AGTH 注意 请使用最新版AGTH 大师用的是这个 AGTH 教程也在这里 GALGAME文字提取agth v2008 11 20汉化
  • 70天复习一次通过信息系统项目管理师考试经验和心得

    和我徒弟一样发文纪念下 xff0c 信息系统项目管理师考试45分 xff0c 我报好名 xff0c 开始复习 xff0c 具体时间 xff0c 自己去某网站看 xff0c 上面写着倒计时70天 xff0c 也不知道对不对 把我 一次通过信息
  • 尤菲·如月 与你有约 ぐりぐりキュートユフィ汉化补丁

    游戏名称 xff1a 游戏厂商 xff1a 游戏大小 xff1a 1 98G 游戏语言 xff1a 汉化 发售日期 xff1a 2010年03月20日 是否有喵咪 xff1a 有 3D T Graph GuriGuriCuteYuffie
  • GALGAME引擎识别工具

    神月星人问过一个问题 最近制作RR汉化时碰到解包器难题 xff0c 有程序人员问起星人说RR游戏是用哪个脚本引擎 xff0c 星人一时哑口无言 xff0c 因为星人并不知道如何得知一款游戏的脚本引擎 要怎麽做呢 我做这个脚本引擎识别工具 可
  • 史上最新最全的ADB命令行

    Android开发工具系列目录 Android项目中Git工具的使用史上最全Git命令使用手冊史上最全的ADB命令行Android中的su命令使用Postman测试WebService接口 adb操作及命令 一 ADB的认识1 ADB组成2
  • Redis最佳实践:7个维度+43条使用规范,带你彻底玩转Redis | 附实践清单

    大家好 xff0c 我是 Kaito 这篇文章我想和你聊一聊 Redis 的最佳实践 你的项目或许已经使用 Redis 很长时间了 xff0c 但在使用过程中 xff0c 你可能还会或多或少地遇到以下问题 xff1a 我的 Redis 内存
  • neutron学习笔记

    neutron学习笔记 最近在看openstack xff0c 记录一下neutron一些重要概念 neutron主要组件 1 neutron server 用于实现neutron api和api扩展 xff0c 管理Router netw
  • Ubantu 安装到VMware详解

    想要在VMware中运行Linux系统 xff0c 那么就需要Linux系统安装到VMware虚拟机上面 在这里 xff0c 以把ubantu16 04安装到VMware虚拟机中为教程进行图文讲解 xff0c 共分为三个步骤 xff0c 分
  • 安装novnc,并加入开机自启

    1 安装git工具 apt get install git y 2 下载novnc git clone https github com novnc noVNC 3 ls 查看 xff0c 已经下载完成 4 vim novnc sh把启动命
  • python装饰器——定义可给装饰器传递参数的装饰器

    普通装饰器 xff1a span class token keyword def span span class token function wrap span span class token punctuation span f sp
  • CS/CSS架构应用的软件性能测试模型分析

    CS CSS系统架构的基本概念 1 1系统架构定义 虽然B S结构 J2EE架构愈来愈成为流行模式 xff0c 但基于传统的C S结构的应用程序还广泛地应用于各种行业 尤其是金融行业中的商业银行柜面 xff0d 核心帐务系统等 一方面由于传

随机推荐