题目限制
时间限制 | 内存限制 | 评测方式 | 题目来源 |
1000ms | 131072KiB | 标准比较器 | Local |
题目背景
太原成成中学第2次模拟赛 第三道
题目描述
有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数)。要求从 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
输入格式
第一行,一个整数,表示箱子容量;
第二行,一个整数,表示有n个物品;
接下来n行,分别表示这n个物品的各自体积。
输出格式
一个整数,表示箱子剩余空间。
提示
Vivian Snow 提供!
样例数据
输入样例 #1 | 输出样例 #1 |
---|---|
24 6 8 3 12 7 9 7 | 0 |
f(i)表示能否得到 i 的体积
推荐阅读《背包九讲》
#include<cmath>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#define inf 1000000000
using namespace std;
int v,n;
int a[35];
bool f[20005];
int main()
{
scanf("%d%d",&v,&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
f[0]=1;
for(int i=1;i<=n;i++)
for(int j=v-a[i];j>=0;j--)
if(f[j])f[j+a[i]]=1;
for(int i=v;i>=0;i--)
if(f[i])
{
printf("%d\n",v-i);
break;
}
return 0;
}