18.03.01 codevs1014 装箱问题

题目描述 Description

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

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

输入描述 Input Description

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

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

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

输出描述 Output Description

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

样例输入 Sample Input

24

6

8

3

12

7

9

7

样例输出 Sample Output

0

 1 #include <iostream>
 2 #include <string.h>
 3 #include <math.h>
 4 
 5 using namespace std;
 6 
 7 int max(int a,int b)
 8 {
 9     return a>b?a:b;
10 }
11 
12 int main()
13 {
14     int v,n;//v容器体积 n物体个数
15     cin>>v>>n;
16     int m[40];
17     for(int i=1;i<=n;i++)
18         cin>>m[i];
19     int f[40][10000]={0};
20     for(int j=1;j<=v;j++)
21         for(int i=1;i<=n;i++)
22     {
23         if(i==1)
24         {
25             if(m[i]>j)
26                 f[i][j]=0;
27             else
28                 f[i][j]=m[i];
29         }
30         else if(j-m[i]<0)
31             f[i][j]=f[i-1][j];
32         else
33         {
34             f[i][j]=max(f[i-1][j-m[i]]+m[i],f[i-1][j]);
35         }
36     }
37     cout<<v-f[n][v]<<endl;
38     return 0;
39 }
View Code

简单的01背包 但我不是很懂容积真的达到20000的时候怎么破

全局变量

posted @ 2018-03-01 22:55  TobicYAL  阅读(285)  评论(0编辑  收藏  举报