RE求助
查看原帖
RE求助
310524
Scherzo楼主2022/10/7 20:44

rt 脑抽了死活挑不出问题

#include <bits/stdc++.h>
#define inf 2147483647
using namespace std;
const int N=15;

int tot,u,maxn=-inf;
int g[N][N],ans[N<<4];
bool f[N][N][N];

struct node {
	int num,h;
}r[N<<2];

struct point {
	int dx,dy;
}s[N<<2];

bool cmp (node a,node b) {
	return a.num<b.num;
}

void Fillin (int x,int y,int v) {
	g[x][y]=v;
	for (register int i=1;i<=9;i++) {
		f[x][i][v]=1;
		f[i][y][v]=1;
		f[x][y][i]=1;
	}
	int row=(x-1)/3*3+1,col=(y-1)/3*3+1;
	for (register int i=row;i<=row+2;i++) {
		for (register int j=col;j<=col+2;j++) {
			f[i][j][v]=1;
		}
	}
}

void Del (int x,int y,int v) {
	g[x][y]=0;
	for (register int i=1;i<=9;i++) {
		f[x][i][v]=0;
		f[i][y][v]=0;
		f[x][y][i]=0;
	}
	int row=(x-1)/3*3+1,col=(y-1)/3*3+1;
	for (register int i=row;i<=row+2;i++) {
		for (register int j=col;j<=col+2;j++) {
			f[i][j][v]=0;
		}
	}
}

int FindScore () {
	int scr=0;
	for (register int i=1;i<=9;i++) {
		for (register int j=1;j<=9;j++) {
			scr+=g[i][j]*6;
		}	
	}
	for (register int i=2;i<=8;i++) {
		for (register int j=2;j<=8;j++) {
			scr+=g[i][j];
		}	
	}
	for (register int i=3;i<=7;i++) {
		for (register int j=3;j<=7;j++) {
			scr+=g[i][j];
		}	
	}
	for (register int i=4;i<=6;i++) {
		for (register int j=4;j<=6;j++) {
			scr+=g[i][j];
		}
	}	
	scr+=g[5][5];
	return scr;
}

void dfs (int p) {
	if (p==u) {
		if (FindScore()>maxn) maxn=FindScore();
		return;
	}
	for (register int i=1;i<=9;i++) {
		if (!f[s[p].dx][s[p].dy][i]) {
			Fillin(s[p].dx,s[p].dy,i);
			dfs(p+1);
			Del(s[p].dx,s[p].dy,i);
		}
	}
	return;
}

int main () {
	memset(f,0,sizeof(f));
	for (register int i=1;i<=9;i++) {
		r[i].h=i;
		for (register int j=1;j<=9;j++) {
			scanf("%d",&g[i][j]);
			if (g[i][j]) {
				Fillin(i,j,g[i][j]);
			}
			if (!g[i][j]) {
				r[i].num++;
			}
		}
	}
	sort(r+1,r+10,cmp);
	for (register int i=1;i<=9;i++) {
		for (register int j=1;j<=9;j++) {
			if (!g[r[i].h][j]) {
				s[++u].dx=r[i].h;
				s[u].dy=j;
			}
		}
	}
	dfs(1);
	printf("%d\n",maxn);
	return 0;
}
2022/10/7 20:44
加载中...