用c语言程序验证装载问题算法,算法学习——动态规划之装载问题

本文介绍了如何使用C语言解决装载问题,通过动态规划的方法,确定如何将集装箱合理分配到两艘船上,使得两艘船都能装载所有集装箱。文章详细阐述了算法思路,递推关系的建立,并给出了具体的C语言实现代码。

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

算法描述

两艘船各自可装载重量为c1,c2,n个集装箱,各自的重量为w[n],设计一个可以装载的方案,使得两艘船装下全部集装箱

算法思路

将第一艘船尽量装满(第一艘船放的集装箱的重量之和接近c1),剩余的集装箱放入第二艘船,若剩余的集装箱重量之和大于第二艘船,则无解

定义一个一维数组,a[n] 存放对应的集装箱的重量

定义一个数组,m[i][j]表示第一艘船还可装载的重量j,可取集装箱编号范围为i,i+1...n的最大装载重量值

例如 现在有3个集装箱 重量分别为9,5,3,即a[1]=9 a[2]=5 a[3]=3

m[1][2]=0 可装载重量为2,此时上述的三个集装箱都不能装入,所以为最大可装载重量为0

m[1][3]=m[1][4]=3 可装载重量为3或者是4的时候,都是只能装入重量为3的那个集装箱,所以最大可装载重量为3 `

实际上,这里的3=a[3]+m[1][2],是一个递推的关系,具体看下面`

m[i][j]分下面两种情况

0<=j

j>=a[n] (可装载重量j大于或等于第n个集装箱的重量w[n]),此时剩余的可装载重量为j-a[n](装入了此时的集装箱),最大的可装载重量为m[i+1][j-w[n]]+w[n]

但是我们是需要最大的可装载重量,所以得与如果不将当前集装箱装入的那种情况m[i+1][j]进行比较

m[i][j]=Math.max(m[i+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值