WIKIOI-1014 装箱问题

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

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

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

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

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

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

24

6

8

3

12

7

9

7

0

 

 

思路:

经典的01背包问题,看代码吧

#include<stdio.h>
int w[20010];
int dp[20010],Weight;
int max(int a,int b)
{return a>b?a:b;}
int zeroOnePack(int n)//01背包
{
    for(int i=1; i<=n; i++)
    {
        for(int j=Weight; j>=w[i]; j--)
        {
            dp[j] = max(dp[j], w[i] + dp[j-w[i]]);
        }
    }
    return dp[Weight];
}
int main()
{
    int i,j,n;
    scanf("%d%d",&Weight,&n);
    for(i=1;i<=n;i++)
    scanf("%d",&w[i]);
    printf("%d\n",Weight-zeroOnePack(n));
    return 0;
} 


 

你可能感兴趣的:(C++,C语言,ACM,OJ,01背包,1014,WIKIOI,装箱问题)