天梯 1014 装箱问题

解题报告:有若干件物品,每件物品有一定的体积,然后有一个体积为V的箱子,要将物品放入这个箱子,求出箱子剩余的体积最小值。

这题其实是一个01背包,体积还是体积,主要就是要把每一件物品的体积当成是它的价值,这样按照01背包的方式求出可以放入的最大价值之后,因为体积等于价值,也就是说最大的 价值也就是可以放入的最大的体积,所以V-dp[V],就得到了最小的剩余体积了。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 using namespace std;
 5 const int maxn = 20000 + 3;
 6 int dp[maxn],w[maxn],V,n;
 7 int main() {
 8     scanf("%d%d",&V,&n);
 9     for(int i = 1;i<=n;++i)
10     scanf("%d",&w[i]);
11     memset(dp,0,sizeof(dp));
12     for(int i = 1;i<=n;++i)
13     for(int j = V;j>=w[i];--j)
14     dp[j] = max( dp[j] , dp[j-w[i]] + w[i]);
15     printf("%d\n",V-dp[V]);
16     return 0;
17 }
View Code

 

posted @ 2013-08-10 20:09  xiaxiaosheng  阅读(265)  评论(0编辑  收藏  举报