打包(free pascal题目)

来源:百度知道 编辑:UC知道 时间:2024/07/05 03:13:35
打包
【题目描述】
某个工厂生产出的产品都要被打包放入正四棱柱的盒子内。所有的盒子高度都为h,但底面尺寸不同,可以为1×1,2×2,3×3,4×4,5×5,6×6。
这些盒子将被放入高度为h,底面尺寸为6×6的箱子里,送到消费者手中。为了降低运送成本,工厂希望尽量减少箱子的数量。请你设计一个程序算出最少需要的箱子数。

【输入格式】
只有一行为六个非负整数,他们分别是1×1,2×2,3×3,4×4,5×5,6×6的盒子的个数。

【输出格式】
箱子的最少个数
想要完整的pascal程序
最好带解释

顶楼上
OIBH网址
www.oibh.org/bbs

三维的背包?
可以参考下 完全背包 的接替思路吧。

你发OIBH上去找牛人吧.

program box sum; /分析可知本题可忽略箱子的高度/

var /为了明确思路逐一设置了辅助变量,因此程序有待简化/
b1,b2,b3,b4,b5,b6:integer; /6种盒子的个数/
s1,s2,s3,s4,s5,s6:intrger; /每种盒子需要的箱子个数/
sum:integer; /箱子总数,最后输出的结果/

function dis(a,b:integer):integer; /定义函数dis为进一法取整/
begin
if a mod b=0
then dis:=a/b
else dis:=(a div b)+1
end;

begin
read(b1,b2,b3,b4,b5,b6);
s6:=b6; /每个6×6的盒子需要1个箱子/
s5:=b5; /每个箱子只能装1个5×5的盒子,但是还能装下5个1×1的盒子/
s4:=b4; /每个箱子能装1个4×4的盒子,还能装下5个2×2的盒子,或20个1×1的盒子/
s3:=dis(b3,4); /每个箱子刚好能装4个3×3的盒子,但是结果必须进一取整/
if b2>(s4*5+(s3*4-b3)*2-1) /比较2×2的盒子个数和在不增加箱子的情况下能够装下2×2的盒子的极限数量/
then s2:=dis(b2-(s4*5+(s3*4-b3)*2-1),9) /需要增加的箱子/
else s2:=0; /不需要增加/
if b1>(s5*5+((s4+s3+s2)*36-(b4*16)-(b3*9)-(b2*4))) /比较1×1