题意:有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.