题意:有n个任务,第i个任务需要时间ti来完成,并且第i个任务必须在它前面的某些任务完成之后才能开始.给你任务信息,问你最短需要多少时间来完成任务.
分析:题目给出的数据已经拓扑有序了,直接DP.
f[i]表示第i个任务完成的最短时间,f[i]=max{f[j]}+ti (j必须在i之前完成)
ans=max{f[i]}.
code:
var f:array[0..10001] of longint;
n,i,j,k,t,p,ans,tmp:longint;
begin
readln(n);
for i:=1 to n do
begin
read(t); read(k);
tmp:=0;
for j:=1 to k do
begin
read(p);
if f[p]>tmp then tmp:=f[p];
end;
readln;
f[i]:=tmp+t;
if f[i]>ans then ans:=f[i];
end;
writeln(ans);
end.
浙公网安备 33010602011771号