洛谷P1049: 装箱问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41505957/article/details/82701444

https://www.luogu.org/problemnew/show/P1049

题目描述

有一个箱子容量为VVV(正整数,0≤V≤200000 \le V \le 200000≤V≤20000),同时有nnn个物品(0<n≤300<n \le 300<n≤30,每个物品有一个体积(正整数)。

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

输入输出格式

输入格式:

111个整数,表示箱子容量

111个整数,表示有nnn个物品

接下来nnn行,分别表示这nnn个物品的各自体积

输出格式:

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

输入输出样例

输入样例#1: 复制

24
6
8
3
12
7
9
7

输出样例#1: 复制

0

说明

NOIp2001普及组 第4题

可以搜索,也可以用背包思想来做,把每个物品的价值当做体积,求能装下的物品的体积最大。

#include<stdio.h>
#define N 20020
int dp[N];
int max(int a,int b)
{
    if(a>b)
        return a;
    return b;
}
int main()
{
    int a,m,n,i,j;
    scanf("%d%d",&m,&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a);
        for(j=m;j>=a;j--)
            dp[j]=max(dp[j],dp[j-a]+a);
    }
    printf("%d\n",m-dp[m]);
   return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41505957/article/details/82701444