【NOIP 2009】 靶形数独
【题目链接】
https://www.luogu.org/problemnew/show/P1074
【算法】
搜索 + 剪枝
【代码】
#include<bits/stdc++.h>
using namespace std;
const int INF = 2e9; struct point
{
int x,y;
} a[]; int i,j,ans,n,Mask,t;
int val[][];
int w[],num[];
bool used[];
int row[],col[],grid[];
bool solved; const int s[][] =
{
{,,,,,,,,},
{,,,,,,,,},
{,,,,,,,,},
{,,,,,,,,},
{,,,,,,,,},
{,,,,,,,,},
{,,,,,,,,},
{,,,,,,,,},
{,,,,,,,,}
}; inline int lowbit(int x)
{
return x & (-x);
}
inline void chkmax()
{
int i,ret = ;
for (i = ; i < ; i++)
{
for (j = ; j < ; j++)
{
ret += val[i][j] * s[i][j];
}
}
ans = max(ans,ret);
}
inline void dfs(int dep)
{
int i,mn,pos,v,t;
if (dep > n)
{
solved = true;
chkmax();
return;
} else
{
v = ; mn = INF;
for (i = ; i <= n; i++)
{
if (!used[i])
{
t = row[a[i].x] & col[a[i].y] & grid[a[i].x/*+a[i].y/];
if (!t) continue;
if (w[t] < mn)
{
mn = w[t];
pos = i;
v = t;
}
}
}
while (v)
{
used[pos] = true;
val[a[pos].x][a[pos].y] = num[lowbit(v)] + ;
row[a[pos].x] ^= lowbit(v);
col[a[pos].y] ^= lowbit(v);
grid[a[pos].x/*+a[pos].y/] ^= lowbit(v);
dfs(dep+);
used[pos] = false;
row[a[pos].x] ^= lowbit(v);
col[a[pos].y] ^= lowbit(v);
grid[a[pos].x/*+a[pos].y/] ^= lowbit(v);
val[a[pos].x][a[pos].y] = ;
v -= lowbit(v);
}
}
} int main()
{ Mask = ( << ) - ;
for (i = ; i <= Mask; i++)
{
w[i] = ;
t = i;
while (t)
{
w[i]++;
t -= lowbit(t);
}
}
for (i = ; i < ; i++) num[ << i] = i;
for (i = ; i < ; i++) row[i] = col[i] = grid[i] = Mask;
for (i = ; i < ; i++)
{
for (j = ; j < ; j++)
{
scanf("%d",&val[i][j]);
if (!val[i][j])
{
n++;
a[n] = (point){i,j};
} else
{
row[i] ^= ( << (val[i][j] - ));
col[j] ^= ( << (val[i][j] - ));
grid[i/*+j/] ^= ( << (val[i][j] - ));
}
}
}
solved = false;
dfs();
if (solved) printf("%d\n",ans);
else printf("-1\n"); return ; }
【NOIP 2009】 靶形数独的更多相关文章
- NOIP 2009 靶形数独(DLX)
小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教,Z 博士拿出了他最近发明的“靶形数独”,作 ...
- [NOIp 2009]靶形数独
Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士拿出了他 ...
- [COGS 0407][NOIP 2009] 靶形数独
407. [NOIP2009] 靶形数独 ★★ 输入文件:sudoku.in 输出文件:sudoku.out 简单对比时间限制:5 s 内存限制:128 MB [问题描述] 小城和小华 ...
- 靶形数独 2009年NOIP全国联赛提高组(搜索)
靶形数独 2009年NOIP全国联赛提高组 时间限制: 4 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 小城和小华都是热爱数 ...
- 【NOIP 2009】靶形数独
题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士拿出了他最近发明的“靶 ...
- NOIp 2009:靶形数独
题目描述 Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教, Z ...
- NOIP2009靶形数独[DFS 优化]
描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z博士请教,Z 博士拿出了他最近发明的“靶形数独 ...
- 靶形数独(codevs 1174)
1174 靶形数独 2009年NOIP全国联赛提高组 时间限制: 4 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Descri ...
- 洛谷 P1074 靶形数独 Label:search 不会
题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的 ...
- [NOIP2009] 靶形数独(搜索+剪枝)
题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的 ...
随机推荐
- SQL Server中char与varchar数据类型区别
在SQL Server中char类型的长度是不可变的,而varchar的长度是可变的 . 存入数据时: 如果数据类型为char时,当定义一个字段固定长度时,如果存进去数据长度小于char的长度,那么存 ...
- 使用cnblogs发布第一篇文章,HelloWorld
HelloWorld! 瞅瞅源码的样式,嗯,语法高亮还是可以的,辨识度还是挺高的. <!DOCTYPE html> <html> <head> <meta c ...
- Android开发笔记(13)——ListFragment
转载请注明:http://www.cnblogs.com/igoslly/p/6959108.html ListFragment ListFragment是继承于Fragment的类,专门用于包含Li ...
- 【MySQL】通信协议
1.TCP/IP(Transmission Control Protocol/Internet Protocol) 该通信协议套件用于连接 Internet 上的主机.在 Linux 操作系统中,TC ...
- Java_Web之神奇的Ajax
为什么使用Ajax? 无刷新:不刷新整个页面,只刷新局部 无刷新的好处 提供类似C/S的交互效果,操作更方面 只更新部分页面,有效利用带宽 什么是Ajax? XMLHttpRequest常用方 ...
- python 爬取妹子
爬取妹子图片 网址:https://www.mzitu.com/jiepai/ 2019-06-13 环境WIN10 1903 python 3.7.3 个人习惯先在IDLE中进行调试 import ...
- Windows Server 2008 R2 搭建DNS服务器(转)
Windows Server 2008 R2 搭建DNS服务器将本机IP设为首选DNS服务器的地址在dos 下分别输入 nslookup www.mydns.com 和 nslookup 192.16 ...
- Ubuntu下解压(unzip)乱码的解决方法
在Windows上压缩的文件,是以Windows系统默认编码中文来压缩文件.由于zip文件中没有声明其编码,所以linux上的unzip一般以默认编码解压,中文文件名会出现乱码. 通过unzip -- ...
- 【剑指Offer】33、丑数
题目描述: 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数 ...
- 【密码学】RSA加密 kotlin实现方法(支持任意字节长度)
这个编辑器不支持kotlin,尴尬了···· 算了,就用Java来弄吧 val 定义常量 var 定义变量 具体kotlin的开发手册详见:http://www.runoob.com/kotlin/k ...