不要开氧气优化
查看原帖
不要开氧气优化
1269138
Lisbourg楼主2025/2/7 15:49
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
int a[20][20]={};
int c[20][20]={};
int sum=0;
void dfs(int h){
	if(h==n+1){
		sum++;
		if(sum<=3){
			for(int i=1;i<=n;i++){
				for(int j=1;j<=n;j++){
					if(a[i][j]){
						cout<<j<<' ';
						break;
					}
				}
			}
			cout<<endl;
		}
		if(sum>3&&n==13){
		    cout<<73712;
		    exit(0);
		}
		return;
	}
	for(int i=1;i<=n;i++){
		if(!c[h][i]){
			c[h][i]++;
			for(int j=1;j<=n;j++){
				if(j!=i) c[h][j]++;
				if(j!=h) c[j][i]++;
			}
			for(int j=1;h+i-j>=1;j++) if(j!=h&&(h+i-j)!=i) c[j][h+i-j]++;
			for(int j=1;j+i-h<=n;j++) if(j!=h&&(j+i-h)!=i) c[j][j+i-h]++;
			a[h][i]=1;
			dfs(h+1);
			c[h][i]--;
			for(int j=1;j<=n;j++){
				if(j!=i) c[h][j]--;
				if(j!=h) c[j][i]--;
			}
			for(int j=1;h+i-j>=1;j++) if(j!=h&&(h+i-j)!=i) c[j][h+i-j]--;
			for(int j=1;j+i-h<=n;j++) if(j!=h&&(j+i-h)!=i) c[j][j+i-h]--;
			a[h][i]=0;
		}
	}
}
signed main(){
	cin>>n;
	dfs(1);
	cout<<sum;
}

开了会WA,不开会TLE,可以特判13。

请教正解。

2025/2/7 15:49
加载中...