【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 博士拿出了他最近发明的 ...
随机推荐
- NuGet 下载dll
PM> Install-Package DotNetCore.CAP PM> Install-Package xxxdll
- AO如何获取SDE数据库中的数据
/// <summary> /// 获取Table类型表的记录 /// </summary> /// <param name="relationCheckCla ...
- 【Oracle】DG中物理备库、快照备库的相互转换
一.物理备库切换快照备库 1. 如果正在运行日志应用,先停止 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 2. 确保数据库为MOUN ...
- Eclipse代码自动提示(内容辅助content assist)
Eclipse中默认是输入"."后出现自动提示,用于类成员的自动提示,可是有时候我们希望它能在我们输入类的首字母后就出现自动提示,可以节省大量的输入时间(虽然按alt + /会出现 ...
- 图像局部显著性—点特征(Fast)
fast作为几乎最快的角点检测算法,一般说明不附带描述子.参考综述:图像的显著性检测--点特征 详细内容,请拜访原=文章:Fast特征点检测算法 在局部特征点检测快速发展的时候,人们对于特征的认识也越 ...
- HDU_5690_快速幂,同余的性质
All X Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem D ...
- Codeforces 898D - Alarm Clock
传送门:http://codeforces.com/contest/898/problem/D 有n个闹钟,第i(1≤i≤n)个闹钟将在第ai(1≤ai≤106)分钟鸣响,鸣响时间为一分钟.当在连续的 ...
- MongoDB简介、特点、原理、使用场景、应用案例
简介 MongoDB[1] 是一个基于分布式文件存储的数据库.由C 语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB[2] 是一个介于关系数据库和非关系数据库之间的产品, ...
- (13)处理静态资源(自定义资源映射)【从零开始学Spring Boot】
上面我们介绍了Spring Boot 的默认资源映射,一般够用了,那我们如何自定义目录? 这些资源都是打包在jar包中的,然后实际应用中,我们还有很多资源是在管理系统中动态维护的,并不可能在程序包中, ...
- 移位运算>>与>>>
无符号右移运算符 (>>>)右移表达式的位,不保留符号.result = expression1 >>> expression2>>>运算符把 e ...