I and OI
Past...

题意:有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.
posted on 2011-08-12 15:35  exponent  阅读(286)  评论(0编辑  收藏  举报