算法训练 装箱问题(贪心,动态规划,蓝桥杯,C++)

算法训练 装箱问题

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
  有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。
  要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
输入格式
  第一行为一个整数,表示箱子容量;
  第二行为一个整数,表示有n个物品;
  接下来n行,每行一个整数表示这n个物品的各自体积。
输出格式
  一个整数,表示箱子剩余空间。
  样例输入
  24
  6
  8
  3
  12
  7
  9
  7
样例输出
0

思路与解析:

1、虽然题干提示这是一道动态规划,但显然这是一道比较简单基础的贪心,首先我们考虑这道题时要分析到如何能让剩余的空间最小,那么你就会想到尽可能装大的物品,装的大,才是最贪的,剩下的空间一定会很小,那我们初期思路就可以时先把物品的重量排序:(STL真好用)

	#include<algorithm>
	
	sort(&a[0],&a[n]);

2、比如说我们这时容量为10,4个物品,分别为2,3,1,4,那么sort之后数组就变成了1 2 3 4,然后我们可以从后(n-1)往前(0)开始遍历,满足条件如果物品小于容量,那么容量就减去物品大小:

for(int i =n - 1 ;i >= 0;i--
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值