求助
查看原帖
求助
159959
虫洞吞噬者楼主2021/9/23 15:30

这个题我的思路是设数组f[i][j]f[i][j]表示在移动了ii步后在kk这棵树下最多能吃到多少苹果。但有一个点一直过不了。我也注意了最开始在第一棵树下面、使用步数为00时不可能吃到第二棵树上的苹果,但依旧过不了(就是那个555的那个点)

code: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;
}
2021/9/23 15:30
加载中...