【题目链接】

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】 靶形数独的更多相关文章

  1. NOIP 2009 靶形数独(DLX)

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

  2. [NOIp 2009]靶形数独

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

  3. [COGS 0407][NOIP 2009] 靶形数独

    407. [NOIP2009] 靶形数独 ★★   输入文件:sudoku.in   输出文件:sudoku.out   简单对比时间限制:5 s   内存限制:128 MB [问题描述] 小城和小华 ...

  4. 靶形数独 2009年NOIP全国联赛提高组(搜索)

    靶形数独 2009年NOIP全国联赛提高组  时间限制: 4 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description 小城和小华都是热爱数 ...

  5. 【NOIP 2009】靶形数独

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

  6. NOIp 2009:靶形数独

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

  7. NOIP2009靶形数独[DFS 优化]

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

  8. 靶形数独(codevs 1174)

    1174 靶形数独 2009年NOIP全国联赛提高组  时间限制: 4 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Descri ...

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

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

  10. [NOIP2009] 靶形数独(搜索+剪枝)

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

随机推荐

  1. HTML的display属性将行内元素、块状元素、行内块状元素互相转换以及三者的区别

    1.行内元素 查看演示 (1)设置宽高无效 (2)对margin仅设置左右方向有效,上下无效:padding设置上下左右都有效,即会撑大空间 (3)不会自动进行换行 <html> < ...

  2. ArcGIS API For Android Errors汇总

    API客户端异常错误的发生通常是由于不正确的方法参数,对象状态依赖,或网络条件. //*******推荐使用方法,按下Ctrl+F搜索错误代码,再查看与代码对应的解释.********// ArcGI ...

  3. WEB笔记-CSS 实现多级导航效果

    代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  4. linux环境jdk安装及配置

    linux环境jdk安装及配置 linux环境jdk安装及配置 1.下载jkd( http://www.oracle.com/technetwork/java/javase/downloads/ind ...

  5. eas之添加表格列宽自动调整设置

    设置表格整体宽度自动调整为所在panel的宽度 KDTable table=new KDTable(); table. setAutoResize (boolean); 注意:该功能在冻结功能启用后, ...

  6. 【剑指Offer】 24、二叉树中和为某一值的路径

      题目描述:   输入一颗二叉树的根结点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中, ...

  7. [51Nod 1218] 最长递增子序列 V2 (LIS)

    传送门 Description 数组A包含N个整数.设S为A的子序列且S中的元素是递增的,则S为A的递增子序列.如果S的长度是所有递增子序列中最长的,则称S为A的最长递增子序列(LIS).A的LIS可 ...

  8. MongoDB之Too many open files

    在Linux下有时会遇到cannot open /dev/urandom Too many open files的问题.其实Linux是有文件句柄限制的,而且Linux默认一般都是1024(阿里云主机 ...

  9. Linux思维导图之用户、组和权限

    安全3A: Authenticanion认证:验证用户身份; 授权授权;依据身份进行不同权利的分配.Acouting | 劲舞团审计:监督工作. user:id -u 令牌:(护符)ID号 .Linu ...

  10. Linux思维导图之inode、mv、cp和硬软链接

    标准I / O和管道:     ps aux进程管理命令(和win任务管理器一样);     当前命令行输出窗口,键盘的输入即是标准输入.标准输出就是执行了的命令,无法执行的命令或错误信息是标准错误, ...