暴搜只过了一个点,但是我举得我想法应该没错
查看原帖
暴搜只过了一个点,但是我举得我想法应该没错
1139221
Agil12_楼主2024/4/1 19:02
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int t,n,ans=-1;
int a[N];
void dfs(int u,int cnt,int sum,int f)//u是时间,cnt是移动次数,sum是接到的苹果,f表示在哪棵树
//f=1表示第一棵树,f=-1表示第2棵树
{
    //时间到了终止
	if(u==t)
	{
		ans=max(ans,sum);
		return;
	}
	//-1和1互换
	if(cnt<n)//还能移动
	{
	if(f==a[u])dfs(u+1,cnt,sum+1,f);//如果就在当前树,那仅仅sum++
	else dfs(u+1,cnt+1,sum+1,-f);//如果不在当前树,那移动次数也要加,在树的状态便相反
	}
	else//不能移动了
	if(f==a[u])dfs(u+1,cnt,sum+1,f);//听天由命,掉在这棵树上就可以捡到
	else dfs(u+1,cnt,sum,f);//否则没法移动,捡不了
	
}
int main()
{
	cin>>t>>n;
	for(int i=0;i<t;i++)
	{
		int x;
		cin>>x;
		if(x==1)a[i]=1;//第一颗
		else a[i]=-1;//第二颗
	}
	dfs(0,0,0,1);//一开始第一棵树
	cout<<ans;
	return 0;
}
2024/4/1 19:02
加载中...