50分求助
查看原帖
50分求助
1004142
jinhangdong楼主2023/9/9 19:45
#include<bits/stdc++.h>
using namespace std;
int a[1001][1001],b[1001][1001],xa,ya,n,m,t;
void dfs(int x,int y,int s)
{
	if(x==n)
	{
		t=max(t,s);
		return;
	}
	if(y==m-1) xa=x+1,ya=2;
	else xa=x,ya=y+1;
	if(s+1>=b[x][y])
	{
		b[x][y]=max(b[x][y],s);
		if(!a[x][y]&&!a[x-1][y-1]&&!a[x-1][y]&&!a[x-1][y+1]&&!a[x+1][y])
		{
			a[x][y]=1;
			a[x-1][y-1]=1;
			a[x-1][y]=1;
			a[x-1][y+1]=1;
			a[x+1][y]=1;
			dfs(xa,ya,s+1);
			a[x][y]=0;
			a[x-1][y-1]=0;
			a[x-1][y]=0;
			a[x-1][y+1]=0;
			a[x+1][y]=0;
		}
		if(!a[x][y]&&!a[x][y-1]&&!a[x][y+1]&&!a[x-1][y+1]&&!a[x+1][y+1])
		{
			a[x][y]=1;
			a[x][y-1]=1;
			a[x][y+1]=1;
			a[x-1][y+1]=1;
			a[x+1][y+1]=1;
			dfs(xa,ya,s+1);
			a[x][y]=0;
			a[x][y-1]=0;
			a[x][y+1]=0;
			a[x-1][y+1]=0;
			a[x+1][y+1]=0;
		}
		if(!a[x][y]&&!a[x-1][y]&&!a[x+1][y-1]&&!a[x+1][y]&&!a[x+1][y+1])
		{
			a[x][y]=1;
			a[x-1][y]=1;
			a[x+1][y-1]=1;
			a[x+1][y]=1;
			a[x+1][y+1]=1;
			dfs(xa,ya,s+1);
			a[x][y]=0;
			a[x-1][y]=0;
			a[x+1][y-1]=0;
			a[x+1][y]=0;
			a[x+1][y+1]=0;
		}
		if(!a[x][y]&&!a[x-1][y-1]&&!a[x][y-1]&&!a[x][y+1]&&!a[x+1][y-1])
		{
			a[x][y]=1;
			a[x-1][y-1]=1;
			a[x][y-1]=1;
			a[x][y+1]=1;
			a[x+1][y-1]=1;
			dfs(xa,ya,s+1);
			a[x][y]=0;
			a[x-1][y-1]=0;
			a[x][y-1]=0;
			a[x][y+1]=0;
			a[x+1][y-1]=0;
		}	
	}
	dfs(xa,ya,s);
}
int main()
{
	cin>>n>>m;
	if(n<3||m<3)
	{
		cout<<0;
		return 0;
	}
	dfs(2,2,0);
	cout<<t;
	return 0;
}
2023/9/9 19:45
加载中...