代码:
#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;
}