主题:装箱问题 ++分
Benix
[专家分:720] 发布于 2005-11-12 08:09:00
谁能教教我怎样用动态规划解装箱问题?? 具体思路是什么?
回复列表 (共15个回复)
沙发
vvv832 [专家分:360] 发布于 2005-11-12 20:26:00
题目说清楚
板凳
zhaoren [专家分:420] 发布于 2005-11-13 18:35:00
yes
3 楼
Benix [专家分:720] 发布于 2005-11-15 17:20:00
给出一个箱子体积和n各物品的体积,求怎样装箱能使箱子的剩余空间最小,这一道题很经典,我已经想通了,但还是希望和大家交流一下
4 楼
chty [专家分:230] 发布于 2005-11-16 16:36:00
const
maxn = 1000;
var
n,i:longint;
h:array[0..maxn] of longint;
sum:array[0..maxn] of longint; { sum[k]=h[1]+h[2]+...h[k] }
begin
read(n);
for i:=1 to n do
begin
h[i]:=1 + sum[i div 2];
sum[i]:=sum[i-1]+h[i];
end;
writeln(h[n]);
end.
是不是啊?
5 楼
Benix [专家分:720] 发布于 2005-11-16 19:38:00
程序要读入n个箱子的体积的
4楼好像没有读
6 楼
Benix [专家分:720] 发布于 2005-11-16 19:40:00
program Sbag;
const maxn=10;
maxv=100;
var f0,f1:array[1..maxv]of boolean;
box:array[1..maxn]of integer;
v,n,i,j:integer;
begin
read(v,n);
for i:=1 to n do read(box[i]);
fillchar(f0,sizeof(f0),0);
f0[0]:=true;
for i:=1 to n do
begin
f1:=f0;
for j:=box[i] to v do
if f0[j-box[i]] then f1[j]:=true;
f1:=f0;
end;
for i:=v downto 1 do
if f1[i] then
begin
writeln(v-i);
halt
end;
end.
就对了
7 楼
▄︻┳═一一一 [专家分:50] 发布于 2006-04-23 17:37:00
8 楼
laojia1 [专家分:0] 发布于 2006-08-16 19:31:00
用什么语言编的啊,是C吗??[em8]
9 楼
tcdkz [专家分:210] 发布于 2006-08-17 15:30:00
我把它当0-1背包来做,好象也行
program ex;
var
v,n,i,j:Integer;
f:array[0..30,0..20000]of integer;
m:array[1..30]of integer;
begin
fillchar(f,sizeof(f),0);
readln(v);
readln(n);
for i:=1 to n do
readln(m[i]);
for i:=1 to n do
for j:=1 to v do
begin
f[i,j]:=f[i-1,j];
if j-m[i]>=0 then begin
if m[i]+f[i-1,j-m[i]]>f[i,j] then
f[i,j]:=m[i]+f[i-1,j-m[i]];
end;
end;
writeln(v-f[n,v]);
end.
10 楼
star3015 [专家分:0] 发布于 2006-08-17 16:01:00
我来吧````这简单```
const maxn=30;
maxv=20000;
var i,k,n,v:integer;
volume:array[1..maxn] of integer;
h:array[0..maxv] of boolean;
begin
read(v,n);
for i:=1 to n do read(volume[i]);
fillchar(h,sizeof(h),false);
h[0]:=false;
for i:=1 to n do
for k:=v downto volume[i] do
h[k]:=h[k] or h[k-volume[i]];
i:=v;
while (i>0) and (not(h[i])) do i:=i-1;
writeln(v-i);
end.
小弟虽然垃圾,但解决这些题还是行的
我来回复