program NDK1504; const maxn=21; maxm=21; maxt=21; var n,m,i,j,machineid,ct,ans:longint; p:array [1..maxn*maxm] of integer; v,t:array [1..maxn,1..maxm] of integer; step,piece:array [1..maxn] of integer; machine:array [1..maxm,1..maxn*maxt] of boolean; procedure fill(machineid,startt,ct:longint); var i:longint; begin for i:=0 to ct-1 do machine[machineid,startt+i]:=true; end; begin readln(m,n); for i:=1 to n*m do read(p[i]); for i:=1 to n do for j:=1 to m do read(v[i,j]); for i:=1 to n do for j:=1 to m do read(t[i,j]); fillchar(piece,sizeof(piece),0); fillchar(machine,sizeof(machine),0); fillchar(step,sizeof(step),0); for i:=1 to n*m do begin inc(step[p[i]]); machineid:=v[p[i],step[p[i]]]; j:=piece[p[i]]; ct:=0; while ct<t[p[i],step[p[i]]] do begin inc(j); if not machine[machineid,j] then inc(ct) else ct:=0; end; fill(machineid,j-t[p[i],step[p[i]]]+1,t[p[i],step[p[i]]]); piece[p[i]]:=j; end; ans:=0; for i:=1 to n do if piece[i]>ans then ans:=piece[i]; writeln(ans); end. 表示这是NOIP2006的标程。。。。。。