这是一神题!!!

可能是因为我太弱了,题解都看不太懂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. Html 响应式 Web

    网格视图 很多网页都是基于网格设计的,这说明网页是按列来布局的. 使用网格视图有助于我们设计网页.这让我们向网页添加元素变的更简单. 响应式网格视图通常是 12 列,宽度为100%,在浏览器窗口大小调 ...

  2. 如何设置C++崩溃时生成Dump文件

    Dump 文件是进程的内存镜像 , 可以把程序的执行状态通过调试器保存到dump文件中 ; Dump 文件是用来给驱动程序编写人员调试驱动程序用的 , 这种文件必须用专用工具软件打开 , 比如使用 W ...

  3. PPTP协议握手流程分析--转载

    一  PPTP概述   PPTP(Point to Point Tunneling Protocol),即点对点隧道协议.该协议是在PPP协议的基础上开发的一种新的增强型安全协议,支持多协议虚拟专用网 ...

  4. Spss22安装与破解步骤

    Spss22安装与破解教程 向师姐请教了一些学术问题,哈哈说的有点大,不过真的很感谢,学到了很多,少走了很多弯路. 1.下载安装包 可以去IBM官网.人大论坛等网站下载,全部文件应包括spss22安装 ...

  5. hdu 3068

    最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. MongoDB 安装及开启关闭

    开启关闭的方式: 命令行 输入 net start mongodb 就打开mongo的服务了 输入 net stop mongodb 关闭服务 验证是否成功的方式: 在浏览器中输入 http://lo ...

  7. 解决Pytohn安装第三方库出现read timed out 问题

    输入pip --default-timeout=100 install -U Packages 如pip --default-timeout=100 install -U Pillow

  8. jquery.lazyload插件实现图片延迟加载详解

    什么是LazyLoad技术? 在页面上图片比较多的时候,打开一张页面必然引起与服务器大数据量的交互.尤其是对于高清晰的图片,占了几百K的空间.Lazy Load 是一个用 JavaScript 编写的 ...

  9. 七、Kafka 用户日志上报实时统计之编码实践

    一.数据生产实现 1.配置数据生产模块 项目基础配置所包含的内容,如下所示: •项目工程的文件配置 •集群连接信息配置 •开发演示 2.实现 Flume 到 Kafka 模块 实现 Flume 到 K ...

  10. idea绘制activity流程图中文乱码解决

    发现问题: 绘制activity的bpm工作流程图的时候,在name项中填写中文,开始的时候没问题,显示的确是中文,关闭文件再打开发现已经乱码,重启idea效果相同,如图 解决方案:修改idea启动参 ...