1295:裝箱問題
時間限制: 1000 ms 內存限制: 65536 KB
提交數: 4957 通過數: 2670
【題目描述】
有一個箱子容量爲V(正整數,0≤v≤20000),同時有n個物品(0< n ≤30),每個物品有一個體積(正整數)。
要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間爲最小。
【輸入】
第一行是一個整數V,表示箱子容量。
第二行是一個整數n,表示物品數。
接下來n行,每行一個正整數(不超過10000),分別表示這n個物品的各自體積。
【輸出】
一個整數,表示箱子剩餘空間。
【輸入樣例】
24
6
8
3
12
7
9
7
【輸出樣例】
0
思路:01揹包的變式,費用等於價值!
#include<cstdio>
#include<iostream>
#define N 100000
using namespace std;
int f[N],c[N];
int v,m;
int main(){
cin >> v >> m;
for(int i = 1; i <= m; i++)
cin >>c[i];
for(int i = 1; i <= m; i++)
for(int j = v; j >= c[i];j--)
f[j] = max(f[j], f[j-c[i]] + c[i]);
printf("%d\n",v - f[v]);
return 0;
}