装箱问题 动态规划 java_[动态规划]装箱问题

该博客讨论了装箱问题的动态规划算法,通过两种方法实现:使用二维数组和一维数组。给出了一段C++代码示例,用于解决在给定箱子容量和物品体积的情况下,如何最大化装入箱子的物品总体积并使剩余空间最小。
摘要由CSDN通过智能技术生成

装箱问题(pack.cpp)

【问题描述】有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0

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

【输入样例】

24

6

8

3

12

7

9

7

【输出样例】

0

样例说明:

24——表示箱子容量

6——表示n个物品

8——n行,分别表示n个物品的体积

312

7

9

7

方法一、使用二维数组f[i][j],表示前i个物品装入容量为j的箱子能获得的最大体积,

动态转移方程: f[i][j]=max(f[i-1][j],f[i-1][j-a[i]]+a[i]);

#include

using namespace std;

int f[31][20001];

int main()

{

freopen("pack.in","r",stdin);

freopen("pack.out","w",stdout);

int V,n,i,j;

cin>>V>>n;

int a[n+1];

for(i=1;i<=n;i++)

cin>>a[i];

for(i=1;i<=n;i++)

for(j=1;j<=V;j++)

{

if(j

f[i][j]=f[i-1][j];

else

f[i][j]=max(f[i-1][j],f[i-1][j-a[i]]+a[i]);

}

cout<

while(1);

return 0;

}

方法二、方法一虽好,但占用内存空间较大,改用一维数组f[j]:

仍表示前i个物品装箱能获得的最大体积。

#include

using namespace std;

int f[20001];//f[j]表示前i个物品装入获得的最大体积

int main()

{

freopen("pack.in","r",stdin);

freopen("pack.out","w",stdout);

int V,n,i,j;

cin>>V>>n;

int a[n+1];

for(i=1;i<=n;i++)

cin>>a[i];

for(i=1;i<=n;i++)

{

for(j=V;j>=1;j--)

{

if(j

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值