tyvj 1016 装箱问题

这是一个关于装箱问题的程序设计题,利用01背包算法解决。题目要求在给定的箱子容量和多个物品体积的情况下,选择物品使得箱子剩余空间最小。通过输入箱子容量、物品数量和各物品体积,程序输出最小剩余空间。样例输入和输出展示了当箱子容量为24,有6个物品时,能够完全装下所有物品,没有剩余空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

装箱问题

描述:
有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数)。要求从 n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
 
输入格式:
第一行,一个整数,表示箱子容量;
第二行,一个整数,表示有n个物品;
接下来n行,分别表示这n个物品的各自体积
 
输出格式:
一个整数,表示箱子剩余空间。
 
样例输入:
24
6
8
3
12
7
9
7
 
样例输出:
0
 
时间限制:
1s
--------------------------------------------------------------------------------------------------
简单的01背包

#include
#include
using namespace std;
int v,n;
int volume[31];
int h[20001];
int main()
{
    int v,n,i,j,k;
   while(cin>>v>>n)
    {
       for(i=1;i<=n;i++)
       cin>>volume[i];
       memset(h,0,sizeof(h));
       h[0]=1;
       for(i=1;i<=n;i++)
       for(k=v;k>=volume[i];k--)
       h[k]=max(h[k],h[k-volume[i]]);
       j=v;
       while(j>0&&h[j]==0)
       j--;
       cout<<v-j<<endl;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值