讨论 / 作业调度方案WA70分,求教。。。。
lsmll 2011-10-29 20:51:00
点我顶贴 收藏 删除
我的程序:

var

i,j,k,l,p,m,n,max:longint;

a:array[1..400] of longint; //安排序列

b,t:array[1..20,1..20] of longint; //b:第i个工件第j个工序的机器;t:第i个工件第j个工序的时间

r:array[1..20,1..8000] of boolean; //r:第i台机器第j时间上是否有任务(true没有false有)

s:array[1..20,1..2] of longint; //s[i,1]:第i个工件上一道工序完成的时间;s[i,2]:第i个工件要进行第几道工序

begin

readln(m,n);

for i:=1 to m*n do read(a[i]);

readln;

for i:=1 to n do begin

for j:=1 to m do read(b[i,j]);

readln;

end;

for i:=1 to n do begin

for j:=1 to m do read(t[i,j]);

readln;

end;

fillchar(r,sizeof(r),true);

for i:=1 to n do begin

s[i,1]:=0;s[i,2]:=1;

end;

for i:=1 to m*n do begin

j:=s[a[i],1]+1;l:=j;

k:=b[a[i],s[a[i],2]];

repeat

while (r[k,l])and(l-j<t[a[i],s[a[i],2]]) do inc(l);

if l-j=t[a[i],s[a[i],2]] then break

else begin

while not r[k,l] do inc(l);

j:=l;

end;

until false;

for p:=j to l-1 do r[k,p]:=false;

inc(s[a[i],2]);s[a[i],1]:=l-1;

end;

max:=-1;

for i:=1 to n do if s[a[i],1]>max then max:=s[a[i],1];

writeln(max);

end.

==========================================

测试结果1: 测试结果错误.错误结果为:13

正确结果应为:18

测试结果2: 通过本测试点|有效耗时63ms

测试结果3: 测试结果错误.错误结果为:11

正确结果应为:14

测试结果4: 通过本测试点|有效耗时172ms

测试结果5: 通过本测试点|有效耗时62ms

测试结果6: 测试结果错误.错误结果为:88

正确结果应为:109

测试结果7: 通过本测试点|有效耗时62ms

测试结果8: 通过本测试点|有效耗时63ms

测试结果9: 通过本测试点|有效耗时62ms

测试结果10:通过本测试点|有效耗时63ms

#1 me999@2011-10-29 07:24:00
回复 删除
1

if max=13 then writeln(max+5);

if max=11 then writeln(max+3);

if max=88 then writeln(max+21);

哥这么过来的。

#2 lsmll@2011-10-29 20:51:00
回复 删除
什么?你也出现了和我一样的问题吗???测试数据有误?
查看更多回复
提交回复