题目描述
有一个箱子容量为 V (正整数, 0≤V≤20000 ),同时有 n 个物品( 0<n≤30 ,每个物品有一个体积(正整数)
要求 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
输入输出格式
输入格式:
1 个整数,表示箱子容量
1 个整数,表示有 n 个物品
接下来 n 行,分别表示这 n 个物品的各自体积
输出格式:
1 个整数,表示箱子剩余空间。
输入输出样例
输入样例#1:
24
6
8
3
12
7
9
7输出样例#1:
3
思路:01背包模板
源代码
#include<iostream>
using namespace std;
int main()
{
int volume,num;
int cubage[1000],space[100000]={0};
int i,j;
cin>>volume>>num;
for(i=1;i<=num;i++) cin>>cubage[i];//输入体积
for(i=1;i<=num;i++)//每个物品依次进行比较
{
for(j=volume;j>=cubage[i];j--)//从现有容量开始,直至当前体积为止
{
if(space[j]<space[j-cubage[i]]+cubage[i])//如果当前箱子空间不如装物品i后的箱子的空间大
space[j]=space[j-cubage[i]]+cubage[i];//就令当前箱子空间=装了物品i后箱子的最大容量
}
}
cout<<volume-space[volume]<<endl;//输出剩余空间,此时space[volume]为箱子最大装载物品容量
return 0;
}