裝箱問題
Time Limit:1000MS
Memory Limit:30000KB
Total Submit:660
Accepted:296
Description
有一個箱子容量為V(正整數,0≤V≤20000),同時有n個物品(0<n≤30),每個物品有一個體積(正整數)。要求從n個物品中,任取若干個裝入箱內,使箱子的剩余空間為最小。
Input
輸入有多組測試數據,第一行一個正整數V,表示箱子的容量
第二行一個數據n表示物品個數。
第三行有n個數據,描述每個物品的體積
Output
每個輸出占一行,輸出箱子最后剩下的最小體積
Sample Input
24 一個整數,表示箱子容量
6 一個整數,表示有n個物品
8 3 12 7 9 7分別表示這n個物品的各自體積
Sample Output
0 一個整數,表示箱子剩余空間
hint:漢字是不需要處理的,只是為了描述題目
你也可以考慮其他的方法。
Source
ECNU算法作業
0-1 背包:
1 #include <iostream>
2 #include <cstring>
3
4 using namespace std;
5
6 const int L = 20003;
7 bool have[ L ];
8
9 int main(){
10 int v, n, w, j;
11 while( cin >> v ){
12 memset( have, 0, sizeof(have) );
13 have[ 0 ] = true;
14 cin >> n;
15 while( n-- ){
16 cin >> w;
17 for( j = v; j >= w; --j ){
18 have[ j ] = have[ j ] || have[ j - w ];
19 }
20 }
21 for( j = v; ! have[ j ]; --j )
22 ;
23 cout << v - j << endl;
24 }
25 return 0;
26 }
27