【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 博士拿出了他最近发明的 ...
随机推荐
- VMWare linux安装mysql 5.7.13
1.基础环境说明 虚拟机:VMWare 操作系统:linux 数据库版本:mysql 5.7.13 社区版(别问为什么不装企业版,因为企业版要钱) 背景:虚拟机可以连上外网 下载目录: /tools/ ...
- Python3编写Windows服务程序
最近做了公司签到的小工具,有同事要求做成Windows服务,开机自启.先说下怎么用Python写Windows服务程序. #encoding=utf-8 import win32serviceutil ...
- C++ Rand()各种实现
参考链接:http://www.cplusplus.com/reference/cstdlib/rand/ 使用实例: v1 = rand() % 100; // v1 in the range 0 ...
- 【技术累积】【点】【java】【20】static关键字
基础概念 是个修饰符: 修饰变量.常量.方法.代码块: 被修饰的为静态: 方便在没有创建对象的情况下来进行调用(方法/变量): static修饰的成员被所有的对象所共享: static优先于对象存在, ...
- Unity与Android通信的中间件
2.1.1 Fragment和Activity都需要实现的接口——IBaseView/** * Description:Basic interface of all {@link Activity} ...
- JavaScript for循环元素取下标问题
<ul> <li>fg</li> <li>gd</li> <li>gds</li> <li>ghe< ...
- 切割窗口url
var keyWords=location.href.split("?")[1].split("&"); console.log(keyWords) f ...
- 图片base64格式转为file文件类型上传方法
日常使用文件上传方式,都是通过input type='file'的文件选择框进行文件上传.但是会通过其他交互方式等到图片的base64格式进行上传.具体情况如下示意: 在项目开发中,需要进行照片采集, ...
- POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法)
手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.csdn.net/suncongbo/article/details/79382991 题目链接: (p ...
- elasticsearch 分布式阅读笔记(二)
说明 扩展分为 纵向扩展:购买更好的服务器 横向扩展:增加服务器(elasticsearch更适合横向扩展) elasticsearch可以用于构建高可用和可扩展的系统,elasticsearch天生 ...