【正文】
begin for l:=1 to n do begin if (jl) and (c[l,j].t[(i1) mod c[l,j].num+1]0) {判斷存在航班} and ((a[i,j]=0) or (a[i1,l]+c[l,j].t[(i1) mod c[l,j].num+1]a[i,j])) {判斷比當(dāng)前解優(yōu)} then a[i,j]:=a[i1,l]+c[l,j].t[(i1) mod c[l,j].num+1]。 end。 e[p]:=a[k,n]。procedure readfile。39。 reset(f)。39。 rewrite(fout)。 p:=0。 fillchar(c,sizeof(c),0)。 for i:=1 to n do begin for j:=1 to i1 do begin read(f,c[i,j].num)。 end。 for l:=1 to c[i,j].num do read(f,c[i,j].t[l])。 end。 readln(f,n,k)。 {輸出各個場景的解} for i:=1 to p1 do writeln(fout,e[i])。 close(f)。end。end.[題3:]解決問題:該題中M本書是順序排列的,K個抄寫員選擇數(shù)也是順序且連續(xù)的??紤]到K〈=M,以抄寫員編號來劃分會方便些。于是便有F(I,J)=MIN{ F(I1,V),T(V+1,J)} (1〈=I〈=K,I〈=J〈=MK+I,I1〈=V〈=J1〉。起步時F(1,1)=P1。程序如下:type tp=array[1..500] of integer。var c:array[1..500] of ^tp。{狀態(tài)值}t:tc。{鏈接路徑} i,j,v,k,m,x,y,min,p1,p2:longint。procedure init。39。 reset(f1)。39。 rewrite(f2)。 if k=1 then begin writeln(f2,1,39。,m)。 halt。 {當(dāng)k=1時,作特殊處理} for i:=1 to m do begin read(f1,j)。 {累加頁數(shù)} end。end。{主過程}begin p1:=1。 {起步狀態(tài)} for i:=2 to k1 do {利用函數(shù)遞推式計算} begin p2:=p1。 for j:=i to mk+i do begin min:=maxlongint。 for v:=i1 to j1 do begin if f[p2,v]t[j]t[v] then x:=f[p2,v] else x:=t[j]t[v]。y:=v。 end。 c[i]^[j]:=y。 end。p1:=1p2。y:=0。 if xmin then begin min:=x。end。 {最后找出最優(yōu)分配方案} for i:=k1 downto 1 do begin cc[i]:=y。 end。 39。 for j:=2 to k1 do writeln(f2,cc[j1]+1,39。,cc[j])。 39。 close(f2)。begin init。end.160