紧急求助,悬1关
  • 板块灌水区
  • 楼主lutaoquan2012
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/3 20:43
  • 上次更新2024/6/3 22:11:06
查看原帖
紧急求助,悬1关
952033
lutaoquan2012楼主2024/6/3 20:43
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll hang[100][100],lie[100][100],gong[100][100][100],a[100][100],cnt;
void dfs(int i,int j){
	if(i>9){
		ll ans=0;
		for(int x=1;x<=9;x++){
			for(int y=1;y<=9;y++){
				if(x==5&&y==5) ans+=a[x][y]*10;
				else if(x==4&&y>=4&&y<=6||y==4&&x>=4&&x<=6||y==6&&x>=4&&x<=6||x==6&&y>=4&&y<=6) ans+=a[x][y]*9;
				else if(x==3&&y>=3&&y<=7||y==3&&x>=3&&x<=7||y==7&&x>=3&&x<=7||x==7&&y>=3&&y<=7) ans+=a[x][y]*8;
				else if(x==2&&y>=2&&y<=8||y==2&&x>=2&&x<=8||y==8&&x>=2&&x<=8||x==8&&y>=2&&y<=7) ans+=a[x][y]*7;
				else ans+=a[x][y]*6;
			}
		}cnt=max(cnt,ans);
		return ;
	}else if(j>9) dfs(i+1,1);
	else if(a[i][j]!=0) dfs(i,j+1);
	else{
		for(int k=1;k<=9;k++){
			int nx=1+(i>3)+(i>6),ny=1+(j>3)+(j>6);
			if(hang[i][k]==0&&lie[j][k]==0&&gong[nx][ny][k]==0){
				hang[i][k]=lie[j][k]=gong[nx][ny][k]=1;
				a[i][j]=k;
				dfs(i,j+1);
				a[i][j]=hang[i][k]=lie[j][k]=gong[nx][ny][k]=0;
			}
		}
	} 
}
int main(){
	for(int i=1;i<=9;i++)
		for(int j=1;j<=9;j++){
			cin>>a[i][j];
			int aa=1+(i>3)+(i>6),bb=1+(j>3)+(j>6),k=a[i][j];
			hang[i][k]=lie[j][k]=gong[aa][bb][k]=1;
		}
	dfs(1,1);
	cout<<cnt;
	return 0;
}

求优化,3个TLE+1个WA

rt.

2024/6/3 20:43
加载中...