题目描述
有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数)。要求从 n 个物品中,任取若千个装入箱内,使箱子的剩余空间为最小。
输入
第一行,一个整数,表示箱子容量; 第二行,一个整数,表示有n个物品; 接下来n行,分别表示这n个物品的各自体积。
输出
有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数)。要求从 n 个物品中,任取若千个装入箱内,使箱子的剩余空间为最小。
输入
第一行,一个整数,表示箱子容量; 第二行,一个整数,表示有n个物品; 接下来n行,分别表示这n个物品的各自体积。
输出
一个整数,表示箱子剩余空间。
这道题有多种思路
1):
这道题 一维可解;
设定0为false,1为true;
面对f[i],可选可不选;
所以f[j]=f[j-v[i]]||f[j];
具体看代码:
int
f[20001];
int
main()
{
int
m,n;
f[0]=1;
scanf
(
"%d%d"
,&m,&n);
int
v[31];
for
(
int
i=1;i<=n;i++)
{
scanf
(
"%d"
,&v[i]);
}
for
(
int
i=1;i<=n;i++)
{
for
(
int
j=m;j>=v[i];j--)
{
if
(f[j]==0)
{
f[j]=f[j-v[i]]||f[j];
}
}