这道题,就不解释什么了吧,很水的动态规划嘛!
状态转移方程:
if a[i]=j
f[i,j,k]=Max{f[i-1,3-j,k-1],f[i-1,j,k]}+1
if a[i]=3-j
f[i,j,k]=Max{f[i-1,3-j,k-1],f[i-1,j,k]}
其中,f[i,j,k]的含义是第i分钟,在第j棵树下,移动了k次所能接到的最多苹果数目
a[i]表示第i分钟时掉下苹果的树的编号
P.s 有兴趣的同学可以试试滚动数组,不过这题显然没必要嘛!
CODE
Program POJ2385;//By_Poetshy
Const
maxn=1005;
Var
i,j,k,m,n,ans :Longint;
f :Array[0..maxn,-1..50,1..2]of Longint;
a :Array[0..maxn]of Longint;
Function Max(i,j:Longint):Longint;
begin
if i>j then exit(i);exit(j);
end;
BEGIN
readln(n,m);
for i:=1 to n do readln(a[i]);
for i:=1 to n do
for j:=0 to m do
for k:=1 to 2 do
if a[i]=k then f[i,j,k]:=Max(f[i-1,j-1,3-k],f[i-1,j,k])+1 else
f[i,j,k]:=Max(f[i-1,j-1,3-k],f[i-1,j,k]);
writeln(Max(f[n,m,1],f[n,m,2]));
END.