社区讨论
80分TLE求调
P1074[NOIP 2009 提高组] 靶形数独参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mizwcpy4
- 此快照首次捕获于
- 2025/12/10 18:59 3 个月前
- 此快照最后确认于
- 2025/12/13 09:35 3 个月前
RT
CPP#include<bits/stdc++.h>
using namespace std;
const int N=15;
int n=9,a[N][N],ans=-1,now;
int score[N][N]=
{
{6,6,6,6,6,6,6,6,6},
{6,7,7,7,7,7,7,7,6},
{6,7,8,8,8,8,8,7,6},
{6,7,8,9,9,9,8,7,6},
{6,7,8,9,10,9,8,7,6},
{6,7,8,9,9,9,8,7,6},
{6,7,8,8,8,8,8,7,6},
{6,7,7,7,7,7,7,7,6},
{6,6,6,6,6,6,6,6,6}
};
bool h[N][N],l[N][N],g[N][N],flag;
void dfs(int x,int y)
{
if(a[x][y]!=0)
{
if(x==8 and y==8)
{
now=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
now+=a[i][j]*score[i][j];
}
}
if(now>ans) ans=now;
return ;
// exit(0);
}
if(y>=8) dfs(x+1,0);
else dfs(x,y+1);
}
else
{
for(int i=1;i<=9;i++)
{
if(h[x][i]==0 and l[y][i]==0 and g[x/3*3+y/3][i]==0)
{
h[x][i]=l[y][i]=g[x/3*3+y/3][i]=1;
a[x][y]=i;
if(x==8 and y==8)
{
now=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
now+=a[i][j]*score[i][j];
}
}
if(now>ans) ans=now;
// return ;
}
if(y>=8) dfs(x+1,0);
else dfs(x,y+1);
a[x][y]=0;
h[x][i]=l[y][i]=g[x/3*3+y/3][i]=0;
}
}
}
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
int x;
cin>>x;
a[i][j]=x;
if(x)
{
h[i][x]=l[j][x]=g[i/3*3+j/3][x]=1;
}
}
}
dfs(0,0);
cout<<ans<<'\n';
return 0;
}
救救孩子!
回复
共 0 条回复,欢迎继续交流。
正在加载回复...