P3384: [Usaco2004 Nov]Apple Catching 接苹果

一道DP题, f[i,j,k] 表示 第 k 时刻 由 1 位置 变换 j 次 到达 当前 i 棵树 注意也要维护 变换 0 次的情况。
 1 var i,j,k,t,w,now:longint;
 2 tree:array[1..2,0..1001] of longint;
 3 f:array[1..2,0..50,0..1001] of longint;
 4 function max(a,b:longint):longint;
 5 begin
 6   if a>b then exit(a)
 7     else exit(b);
 8 end;
 9 begin
10   readln(t,w);
11   for i:=1 to t do
12     begin
13       readln(now);
14       tree[now,i]:=1;
15     end;
16     for i:=1 to t do
17     for j:=0 to w+i-max(i,w) do
18       for k:=1 to 2 do
19         begin
20           if (j=0) and (k<>2) then begin
21             f[k,j,i]:=f[k,j,i-1]+tree[k,i];
22             continue;
23           end
24           else if j=0 then continue;
25           f[k,j,i]:=max(f[k,j,i],tree[k,i]+max(f[3-k,j-1,i-1],f[k,j,i-1]));
26           //writeln(i,' ',j,' ',f[k,j,i]);
27         end;
28   writeln(max(f[1,w,t],f[2,w,t]));
29 end.
View Code
   (转载请注明出处:http://www.cnblogs.com/Kalenda/)

转载于:https://www.cnblogs.com/Kalenda/p/4831955.html

你可能感兴趣的:(P3384: [Usaco2004 Nov]Apple Catching 接苹果)