这个题我的思路是设数组f[i][j]表示在移动了i步后在k这棵树下最多能吃到多少苹果。但有一个点一直过不了。我也注意了最开始在第一棵树下面、使用步数为0时不可能吃到第二棵树上的苹果,但依旧过不了(就是那个555的那个点)
code:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,ans;
int num[100100];
int f[50][3];
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)scanf("%d",&num[i]);
for(int i=1;i<=n;++i)
{
for(register int j=m;j>=0;--j)
{
if((!j)&&(num[i]==1))
{
f[j][num[i]]=f[j][num[i]]+1;
continue;
}
if(num[i]==1&&i!=1)f[j][1]=max(f[j-1][2],f[j][1])+1;
else if(num[i]==1&&i==1)++f[j][1];
else if(num[i]==2)f[j][2]=max(f[j-1][1],f[j][2])+1;
}
}
for(int i=0;i<=m;++i)
ans=max(ans,max(f[i][1],f[i][2]));
printf("%d",ans);
return 0;
}