算法训练 装箱问题
资源限制
时间限制: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--