40分求助!
#include<bits/stdc++.h>
using namespace std;
int n,m,ans;
bool vis[10][10],flag;
void dfs(int now){
if(flag) return;
if(now==ans){
flag=1;
return;
}
for(register int i=1;i<=n;i++){
for(register int j=1;j<=m;j++){
if(j>1&&j<n&&i<m-1&&!vis[i][j-1]&&!vis[i][j]&&!vis[i][j+1]&&!vis[i+1][j]&&!vis[i+2][j]){
vis[i][j-1]=vis[i][j]=vis[i][j+1]=vis[i+1][j]=vis[i+2][j]=1;
dfs(now+1);
vis[i][j-1]=vis[i][j]=vis[i][j+1]=vis[i+1][j]=vis[i+2][j]=0;
}
if(i>1&&i<n&&j<m-1&&!vis[i-1][j]&&!vis[i][j]&&!vis[i+1][j]&&!vis[i][j+1]&&!vis[i][j+2]){
vis[i-1][j]=vis[i][j]=vis[i+1][j]=vis[i][j+1]=vis[i][j+2]=1;
dfs(now+1);
vis[i-1][j]=vis[i][j]=vis[i+1][j]=vis[i][j+1]=vis[i][j+2]=0;
if(flag) return;
}
if(j>1&&j<n&&i>2&&!vis[i][j-1]&&!vis[i][j]&&!vis[i][j+1]&&!vis[i-1][j]&&!vis[i-2][j]){
vis[i][j-1]=vis[i][j]=vis[i][j+1]=vis[i-1][j]=vis[i-2][j]=1;
dfs(now+1);
vis[i][j-1]=vis[i][j]=vis[i][j+1]=vis[i-1][j]=vis[i-2][j]=0;
if(flag) return;
}
if(i>1&&i<n&&j>2&&!vis[i-1][j]&&!vis[i][j]&&!vis[i+1][j]&&!vis[i][j-1]&&!vis[i][j-2]){
vis[i-1][j]=vis[i][j]=vis[i+1][j]=vis[i][j-1]=vis[i][j-2]=1;
dfs(now+1);
vis[i-1][j]=vis[i][j]=vis[i+1][j]=vis[i][j-1]=vis[i][j-2]=0;
if(flag) return;
}
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(ans=1;;ans++){
flag=0;
dfs(0);
if(!flag){
ans--;
break;
}
}
printf("%d",ans);
return 0;
}