裝箱問題
題目描述
有一個箱子容量爲VV(正整數,0 \le V \le 200000≤V≤20000),同時有nn個物品(0<n \le 300<n≤30,每個物品有一個體積(正整數)。
要求nn個物品中,任取若干個裝入箱內,使箱子的剩餘空間爲最小。
輸入格式
11個整數,表示箱子容量
11個整數,表示有nn個物品
接下來nn行,分別表示這nn個物品的各自體積
輸出格式
11個整數,表示箱子剩餘空間。
輸入輸出樣例
輸入 #1
24
6
8
3
12
7
9
7
輸出 #1
0
說明/提示
NOIp2001普及組 第4題
這題很明顯每個物品只能選一次,明顯的01揹包…套模板就可以了…
唯一的區別就是最後不是輸出f[k]
而是輸出剩餘的空間k-f[k]
就可以了
參考:
【模板】01揹包
#include<iostream>
using namespace std;
int a[35],k,f[20001],n;
int main()
{
ios::sync_with_stdio(false);
cin>>k>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
for(int j=k;j>=a[i];j--)
f[j]=max(f[j],f[j-a[i]]+a[i]);
cout<<k-f[k];
return 0;
}