95分,wa在第一个点,求调
查看原帖
95分,wa在第一个点,求调
783233
1925153zty楼主2023/10/18 20:37

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=11;
bool h[N][N],l[N][N],g[N][N];
int maxx=0,ans;
int gs(int x,int y)
{
	return ((x-1)/3)*3+(y+2)/3;
}
int fs(int x,int y)
{
	return 10-max(abs(x-5),abs(y-5));
}
struct dd
{
	int yx,g;
}js[N];
int jgg[N][N];
bool cmp(const dd&a,const dd&b)
{
	return a.g<b.g;
}
void dfs(int t,int tmp,int s,int ha)
{
	if(t==9&&ha==js[t].g)
	{
	maxx=max(maxx,tmp);
	return;
	}
	if(ha==js[t].g)
	dfs(t+1,tmp,0,0);
	int u=0,p=js[t].yx;
	for(int i=s+1;i<=9;i++)
	if(jgg[js[t].yx][i]==0)
	{
		u=i;
		break;
	}
	for(int i=1;i<=9;i++)
	if(h[p][i]==0&&l[u][i]==0&&g[gs(p,u)][i]==0)
	{
		h[p][i]=l[u][i]=g[gs(p,u)][i]=1;
		jgg[p][u]=i;
		dfs(t,tmp+i*fs(p,u),u,ha+1);
		h[p][i]=l[u][i]=g[gs(p,u)][i]=0;
		jgg[p][u]=0;
	}
}
int main()
{
	for(int i=1;i<=9;i++)
	for(int j=1;j<=9;j++)
	{js[i].yx=i;
	cin>>jgg[i][j],ans+=fs(i,j)*jgg[i][j];
	if(!jgg[i][j])
	js[i].g++;
	else
	h[i][jgg[i][j]]=1,l[j][jgg[i][j]]=1,g[gs(i,j)][jgg[i][j]]=1;
	}
	sort(js+1,js+10,cmp);
	dfs(1,ans,0,0);
	cout<<maxx;
}
2023/10/18 20:37
加载中...