1 条题解

  • 0

    #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
    上传者