题意:有n个物品,选出k个装入容积为v的箱子,使空余体积最小,求最小体积。
思路:01背包问题
注意点:无
以下为AC代码:
评测状态 | Accepted |
题目 | P1133 装箱问题 |
递交时间 | 2014-11-07 12:33:13 |
代码语言 | C++ |
评测机 | VijosEx |
消耗时间 | 30 ms |
消耗内存 | 360 KiB |
评测时间 | 2014-11-07 12:33:15 |
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <vector>
#include <deque>
#include <list>
#include <cctype>
#include <algorithm>
#include <climits>
#include <queue>
#include <stack>
#include <cmath>
#include <set>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
int dp[20005];
int main()
{
int n, v;
while ( cin >> v )
{
cin >> n;
int num[35];
memset ( dp, 0, sizeof ( dp ) );
memset ( num, 0, sizeof ( num ) );
for ( int i = 0; i < n; i ++ )
{
cin >> num[i];
}
dp[0] = true;
for ( int i = 0; i < n; i ++ )
{
for ( int j = v; j >= num[i]; j -- )
{
if ( dp[j-num[i]] )
{
dp[j] = true;
}
}
}
for ( int i = v; i >= 0; i -- )
{
if ( dp[i] )
{
cout << v - i << endl;
break;
}
}
}
return 0;
}