题目描述
有一个箱子容量为 V,同时有 n 个物品,每个物品有一个体积。
现在从 n 个物品中,任取若干个装入箱内(也可以不取),使箱子的剩余空间最小。输出这个最小值。
题目限制
输入格式
第一行共一个整数 V,表示箱子容量。
第二行共一个整数 n,表示物品总数。
接下来 n 行,每行有一个正整数,表示第 i 个物品的体积。
输出格式
- 共一行一个整数,表示箱子最小剩余空间。
输入输出样例
解题思路
这是一个01背包问题,只是该题求最小剩余空间,我们可以求最大的使用空间,最后用总体积V减去最大的使用空间即可
AC代码
#include <bits/stdc++.h>
using namespace std;
int V,n,c[31],m[20001];
int main()
{
cin>>V>>n;
for(int i=0;i<n;i++)
cin>>c[i];
memset(m,0,sizeof(m));
for(int i=0;i<n;i++)
{
for(int j=V;j>=c[i];j--)
{
m[j]=max(m[j],m[j-c[i]]+c[i]); //算最大存放体积
}
}
cout<<V-m[V];
return 0;
}