装箱问题

                                                                                                   装箱问题

问题描述:

     有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。

     要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小.

 

输入描述:

    一个整数v,表示箱子容量

    一个整数n,表示有n个物品

    接下来n个整数,分别表示这个物品的各自体积

 

输出描述:

    一个整数,表示箱子剩余空间

 

样例输入:

24
6
8
3
12
7
9
7

样例输出:

0

这是一道简单的动态规划问题,要求最小的剩余空间,只要求出能占用的最大空间就行了,动态规划方程为 dp[V]=max(dp[V],dp[V-v[i]]+v[i]);

 

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 int main()
 5 {
 6     int v,m,n,dp[20020];
 7     while(cin>>v>>n)  //箱子容积&&物品数
 8     {
 9         memset(dp,0,sizeof(dp)); //初始化
10         for(int i=0;i<n;i++)
11         {
12             cin>>m;          //物品的体积
13             for(int j=v;j>=m;j--)
14                 dp[j]=max(dp[j],dp[j-m]+m);
15         }
16         cout<<v-dp[v]<<endl;
17     }
18 
19 }

 第一次写blog。没人知道我是谁

posted @ 2013-12-22 00:20  Jav  阅读(358)  评论(0)    收藏  举报