1 条题解
-
0南风北庙 (slz罗栎晟) LV 8 @ 2024-2-1 16:45:18
#include<bits/stdc++.h> using namespace std; const int N=1145; int a[10][10]; bool row[10][10],col[10][10],cir[10][10]; int maxx=-1; struct node{ int hang,num; }b[10]; bool cmp(node a1,node a2) { return a1.num>a2.num; } void dfs(int sx,int y){ int x=b[sx].hang; if(sx==9){ int sum=0; for(int i=0;i<=8;i++){ for(int j=0;j<=8;j++) sum+=a[i][j]*min(10-abs(i-4),10-abs(j-4)); } maxx=max(maxx,sum); return;
} if(y==9){ dfs(sx+1,0); return; } if(a[x][y]){ dfs(sx,y+1); return; }else{ for(int i=1;i<=9;i++){ if(!row[x][i]&&!col[y][i]&&!cir[x/3*3+y/3][i]){ a[x][y]=i; row[x][i]=col[y][i]=cir[x/3*3+y/3][i]=1; dfs(sx,y+1); row[x][i]=col[y][i]=cir[x/3*3+y/3][i]=0; a[x][y]=0; } } }
} int main(){ for(int i=0;i<9;i++){ for(int j=0;j<9;j++) { cin>>a[i][j]; if(a[i][j]){ row[i][a[i][j]]=1; col[j][a[i][j]]=1; cir[i/3*3+j/3][a[i][j]]=1; b[i].num++; } } b[i].hang=i; } sort(b,b+9,cmp); dfs(0,0); cout<<maxx; return 0; }
- 1
信息
- ID
- 3012
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 58
- 已通过
- 13
- 上传者