装箱问题
题目
有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30=,每个物品有一个体积(正整数)。要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
Sample Input
24//一个整数,表示箱子容量
6//一个整数,表示有n个物品
8//接下来n行,分别表示这n 个物品的各自体积
3
12
7
9
7
Sample Output
0//一个整数,表示箱子剩余空间。
解析
DFS暴搜题目……
上代码!
#include<iostream>
#include<cstdio>
using namespace std;
int b,n,i=1,a[31],m=0;
void init()
{
cin>>b>>n;
for(;i<=n;i++)cin>>a[i];
}
void dfs(int dep,int k)
{
if(k>b)return;
m=max(k,m);
if(dep>n)
{
m=max(m,k);
return;
}
dfs(dep+1,k+a[dep]);
dfs(dep+1,k);
}
void work()
{
dfs(0,0);
}
void output()
{
cout<<b-m;
}
int main()
{
init();
work();
output();
return 0;
}