这是一神题!!!

可能是因为我太弱了,题解都看不太懂QWQ

不过感谢wng老师的提醒,我写出了这个样的的代码。

分析:

这道题是一个搜索(dfs)。很神奇很暴力的题

首先,你需要看懂题目。(可以先去玩下正常的数独,然后基本就明白了....)

其次,应题目要求,我们使用三个数组来标记在此位置填数合不合法,然后有一个非常自然的想法,从每个位置来搜,填数后递归,填完后计算出答案,取最大值。

不过你会发现你爆栈了!!!

所以我开三个数组,记录行列以及九宫格的状态,只有在三个数组中都未出现的值才可以被填入,不过我是反着搜的。

CODE:

// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#include<algorithm> #define ll long long
#define re register
//define大法好!!! using namespace std; bool line[10][10],roway[10][10],nine[10][10];
int a[10][10],b[10][10];
int got[10][10][10];
int ans = -1, score; inline int math_sign(int x,int y ,int z){
if(x == 5 && y == 5)
return 10 * z;
else if(x >= 4 && x <= 6 && y >= 4 && y <= 6)
return 9 * z;
else if(x >= 3 && x <= 7 && y >= 3 && y <= 7)
return 8 * z;
else if(x >= 2 && x <= 8 && y >= 2 && y <= 8)
return 7 * z;
else return 6 * z;
}//模拟数独的得分方式 inline bool get_score(int x,int y,int z){
if(roway[x][z] || line[y][z] || nine[(x - 1) / 3 * 3 + (y - 1) / 3][z])
return 0;
b[x][y] = z;
roway[x][z] = line[y][z] = nine[(x - 1) / 3 * 3 + (y - 1) / 3][z] = 1;
score += got[x][y][z];
return 1;
} inline int _read(){
re int x = 0;
re int flag = true;
re int k = getchar();
while(k != '-' && !isdigit(k))
k = getchar();
if(k == '-'){
k = getchar();
flag = false;
}
while(isdigit(k)){
x = x * 10 + k - '0';
k = getchar();
}
return (flag ? x : -x);
}//读入优化,不会的可以背一下 inline void del(int x,int y,int z){
roway[x][z] = line[y][z] = nine[(x - 1) / 3 * 3 + (y - 1)/3][z] = 0;
} void dfs(int x,int y ){
if(x == 10 && y == 1){
ans = max(ans,score);
return;
}
if(b[x][y]){
if(y == 9)
dfs(x + 1, 1);
else
dfs(x,y + 1);
}
else{
for(int i = 1 ;i <= 9 ;i++){
int t = score;
if(get_score(x,y,i)){
if(y == 9)
dfs(x + 1,1);
else
dfs(x,y + 1);
del(x,y,i);
score = t;
}
}
b[x][y] = 0;
}
} int main(){
for(int i = 1; i<= 9; i++)
for(int j = 1; j <= 9 ;j++)
for(int k = 1; k<= 9 ; k++)
got[i][j][k] = math_sign(i,j,k);
for(int i = 9; i > 0 ; i--)
for(int j = 9; j > 0 ; j--){
a[i][j] = _read();
if(a[i][j])
get_score(i,j,a[i][j]);
}
dfs(1,1);
printf("%d",ans);
return 0;
}

没错,我开了O2优化,额————其实是因为之前花式被卡,各种TLE,于是我就打开了氧气罐子优化QAQ。。。

祝大家早日AC,不再TLE。(点个赞吧)

题解 P1074 【靶形数独 】的更多相关文章

  1. P1074 靶形数独

    P1074 靶形数独正着搜80分,完全倒置95分,完全倒置后左右再倒置,就会A掉,到时候脑洞要大一些. #include<iostream> #include<cstdio> ...

  2. 洛谷——P1074 靶形数独

    P1074 靶形数独 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z ...

  3. P1074 靶形数独题解

    题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士拿出了他最近发明的“靶 ...

  4. 洛谷P1074 靶形数独 [搜索]

    题目传送门 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了 ...

  5. 洛谷 P1074 靶形数独 Label:search 不会

    题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的 ...

  6. P1074 靶形数独 dfs回溯法

    题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士拿出了他最近发明的“靶 ...

  7. [洛谷P1074] 靶形数独

    洛谷题目链接:靶形数独 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博 ...

  8. 洛谷 P1074 靶形数独

    题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的 ...

  9. [NOIP2009] 提高组 洛谷P1074 靶形数独

    题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的 ...

  10. luogu P1074 靶形数独

    题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的 ...

随机推荐

  1. 单点登录(七)-----实战-----cas server去掉https验证

    我们在搭建cas中已经说过如果不搭建https证书体系的需要去掉https的验证: 单点登录(二)----实战------简单搭建CAS---测试认证方式搭建CAS 因为cas4.2以上的代码做了一些 ...

  2. 遇到问题----mongodb-----mongorestore报错too many open files甚至mongo服务崩溃

    之前运行mongorestore还原mongodb数据库一直都没问题,今天还原的时候 报错too many open files.而且mongo服务经常崩溃需要重启. 问题有两方面: 原因一 一个原因 ...

  3. Windows + Ubuntu下JDK与adb/android环境变量配置完整教程

    假设JDK和android sdk路径分别如下: D:\Program Files\Java\jdkD:\android-sdk 1.JDK环境变量配置JAVA_HOME=D:\Program Fil ...

  4. bzoj 3853 : GCD Array

    搬运题解Claris:1 n d v相当于给$a[x]+=v[\gcd(x,n)=d]$ $\begin{eqnarray*}&&v[\gcd(x,n)=d]\\&=& ...

  5. 【bzoj4084】【sdoi2015】双旋转字符串

    题解 首先题中说了$n>=m$; 分成的循环串左右两边为本质相同的单循环串循环串,分别长为$l = \frac{n + m}{2} $; 所以$S$串的前$l$位为双循环串的一半$S1$,后一半 ...

  6. 微服务Kong(八)——代理参考

    Kong侦听四个端口的请求,默认情况是: 8000:此端口是Kong用来监听来自客户端的HTTP请求的,并将此请求转发到您的上游服务.这也是本教程中最主要用到的端口. 8443:此端口是Kong监听H ...

  7. windows下Python三步安装pip

    pip是用来方便地管理Python的第三方包的,由于此前玩Python仅仅是浅尝辄止,用的是python(x,y),但是这里并不代表你想用什么包都能从里面找到的,所以我把python(x,y)卸了,然 ...

  8. 题解【CF103D Time to Raid Cowavans】

    Description 给一个序列 \(a\) ,\(m\) 次询问,每次询问给出 \(t, k\) .求 \(a_t + a_{t+k}+a_{t+2k}+\cdots+a_{t+pk}\) 其中 ...

  9. Redis 创建多个端口 链接redis端口

    默认的是6379 可以用6380,6381开启多个 1.开启 ./redis-server ../etc/redis.6380.conf & 2.链接 redis-cli -p 6380 查看 ...

  10. [Vue warn]: Do not mount Vue to <html> or <body> - mount to normal elements instead.

    官方文档是这么解释的: 提供的元素只能作为挂载点.不同于 Vue 1.x,所有的挂载元素会被 Vue 生成的 DOM 替换.因此不推荐挂载root实例到 <html> 或者 <bod ...