code1174 靶形数独
主要是优化搜索顺序
从选择较少的点开始,可以大大提高效率
在search(x,y)找点的时候,对于一个空点(x y),设置一个评分score:
score=min{ 横线x上能填的数字个数,竖线y上...个数,所在大方块中...个数 }
选取score最小的点搜索
代码:
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
const int N = ;
const int Size = N+; int ans=-;
int data[Size][Size];
bool a[Size][Size],b[Size][Size],c[Size][Size];//行 列 大方格
int numA[Size],numB[Size],numC[Size];
int dx[]={,,,-};
int dy[]={,,-,};
int dic[Size][Size]={
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,}
};
int len[Size]={ ,
,,,,
}; int getscore(){
int ans=;
int x,y;
for(int temp=;temp<=N/;temp++){
x=y=temp;
for(int k=;k<;k++){
for(int i=;i<=len[temp];i++){
ans+=data[x][y]*(temp+);
x+=dx[k];y+=dy[k];
}
}
}
ans+=data[][]*;
return ans;
} void search(int& x,int& y){
x=y=;
int best=,score;
for(int i=;i<=N;i++){
for(int j=;j<=N;j++){
if(data[i][j]==){
score=min(numA[i],numB[j]);
score=min(score,numC[dic[i][j]]);
if(score<best){
x=i;y=j;
best=score;
}
}
}
}
} void dfs(){
int x,y;
search(x,y);
if(x==){
ans=max(ans,getscore());
//exit(0);
return;
}
bool num[Size];
memset(num,true,sizeof(num));
int ff=dic[x][y];
for(int k=;k<=N;k++){
if(a[x][k]==true||b[y][k]==true||c[ff][k]==true)
num[k]=false;
}
for(int k=;k<=N;k++){
if(num[k]==true){
data[x][y]=k;
a[x][k]=true;b[y][k]=true;c[ff][k]=true;
numA[x]--;numB[y]--;numC[ff]--;
dfs();
numA[x]++;numB[y]++;numC[ff]++;
a[x][k]=false;b[y][k]=false;c[ff][k]=false;
data[x][y]=;
}
}
return;
} int main(){
freopen("1174.in","r",stdin);
for(int i=;i<=;i++)numA[i]=numB[i]=numC[i]=;
int x;
for(int i=;i<=N;i++){
for(int j=;j<=N;j++){
cin>>x;
if(x!=){
a[i][x]=true;numA[i]--;
b[j][x]=true;numB[j]--;
c[dic[i][j]][x]=true;numC[dic[i][j]]--;
}
data[i][j]=x;
}
}
dfs();
cout<<ans<<endl; fclose(stdin);
return ;
}
code1174 靶形数独的更多相关文章
- NOIP2009靶形数独[DFS 优化]
描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z博士请教,Z 博士拿出了他最近发明的“靶形数独 ...
- 靶形数独(codevs 1174)
1174 靶形数独 2009年NOIP全国联赛提高组 时间限制: 4 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Descri ...
- 洛谷 P1074 靶形数独 Label:search 不会
题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的 ...
- 【CodeVS】p1174 靶形数独
题目描述 Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教,Z 博士 ...
- [NOIP2009] 靶形数独(搜索+剪枝)
题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的 ...
- 靶形数独 (codevs 1174)题解
[问题描述] 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教,Z 博士拿出了他最近发明的“ ...
- NOIP2009 靶形数独
4.靶形数独 (sudoku.pas/c/cpp) [问题描述] 小城和小华都是热爱数学的好学生, 近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了, ...
- Luogu1074靶形数独【启发式搜索】
Luogu1074靶形数独 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, ...
- 【NOIP2009】【CJOJ1687】【洛谷1074】靶形数独
题面 Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z博士请教,Z 博士拿出 ...
随机推荐
- 记录:Web无引用无配置方式动态调用WCF服务
这几年一直用WebApi较多,最近项目中有个需求比较适合使用WCF,以前也用过JQuery直接调用Wcf的,但是说实话真的忘了… 所以这次解决完还是花几分钟记录一下 WCF服务端:宿主在现有Win服务 ...
- MOSS 2013研究系列---列表的资源限制
MOSS2010 以后,对列表的条目数做了一些限制,大量的将数据存储在列表中,会降低列表的运行效能,因此,MOSS中对列表默认有了一个阀值,默认是5000条数据,当你存储的数据多余5000条的时候,用 ...
- Memory stream is not expandable
发现项目有一个地方在做图片缩放剪切的一个操作中.碰到有一些特殊的图片会报 Memory stream is not expandable 的错误 跟踪的时候发现是 由方法 originalStream ...
- golang的指针到string,string到指针的转换
由于某个需求,需要如题的转换,废话不多说,直接贴代码了,其实挺丑了,备用了 func (this *Server) socketParserHandler(client *genTcpServer.C ...
- 窗口点击模拟a
[问题描述] 在计算机屏幕上,有N 个窗口.窗口的边界上的点也属于该窗口.窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示位于顶层的窗口里的内容.当你用鼠标点击屏幕上一个点的时候,若其在窗口 ...
- Java 判断某一天是这一年的第几天
package Day8_06; import java.util.*; public class ClassTest { public static void main(String[] args) ...
- Git回版本回退
这里我们使用命令行的方式对已经提交的版本进行强行回退操作~~~ 一.将git的安装目录bin放到path路径中, 如下图所示: 二.进入cmd界面,依次输入下面内容即可(git 远程仓库 回退到指定版 ...
- line 1: syntax error: unexpected word (expecting ")")
编译出来的程序在arm平台上运行时,出现下面的错误. / # wpa_supplicant -B -c/etc/wpa_wpa2.conf -iwlan0 /bin/wpa_supplicant: ...
- Python handling an exception
#try...except... try: You do your operations here; ...................... except ExceptionI: If ther ...
- Drools笔记:初识与入门
Drools是什么? Drools是一个用Java编写的开源规则引擎,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境 ...