深搜60pts,求助!
查看原帖
深搜60pts,求助!
104308
Capitalism_Gao楼主2020/8/2 21:38
#include<bits/stdc++.h>
#define r register
using namespace std;

const int maxn=9+5;
int n,c,ans;
bool chess[maxn][maxn];

void dfs(r int i,r int j,r int k) {
    if(i>n) {
	    if(k==c) ++ans;
    	return;
	}
	
	if(k + ( (n-j+1+1)/2 ) + ( ((n+1)/2) * ((n-i+1)/2) ) < c) return;
	 
    chess[i][j]=0;
    if(j+1>n) dfs(i+1,1,k);
    else dfs(i,j+1,k);
    
	chess[i][j]=1;chess[i][j+1]=0;
	if(chess[i-1][j-1]||chess[i-1][j]||chess[i-1][j+1]) return;
 	if(j+2>n) dfs(i+1,1,k+1);
    else dfs(i,j+2,k+1);
}

int main() {
	scanf("%d%d",&n,&c);
    dfs(1,1,0);
    printf("%d",ans);
	
    return 0;
}
2020/8/2 21:38
加载中...