NOIP2001(或之前)裝箱問題

裝箱問題

題目描述
有一個箱子容量爲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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章