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 博士拿出 ...
随机推荐
- laravel Auth token创建于使用
token 的创建和使用, https://laravelacademy.org/post/3640.html 用户表密码字段验证修改,不只是password https://www.jianshu. ...
- FPGA学习的一点总结
做FPGA主要是要有电路的思想,作为初学者,往往对器件可能不是熟悉,那么应该要对数字电路的知识熟悉. FPGA中是由触发器和查找表以及互联线等基本结构组成的,其实在逻辑代码里面能够看到的就是与非门以及 ...
- 如何配置Python环境
(1) 下载:请在Python官网下载页面(https://www.python.org/downloads/)选择合适的版本(建议选择3.5.2版)的链接,在该版本的下载页面选择合适的安装文件:64 ...
- struts2学习(4)struts2核心知识III
一.result配置: result - name 就是前面返回的值,success,error等. type: dispatcher. 默认是这个,底层是jsp的forward: redirect: ...
- 准确计算Java中对象的大小
由于在项目中需要大致计算一下对象的内存占用率(Hadoop中的Reduce端内存占用居高不下却又无法解释),因此深入学习了一下如何准确计算对象的大小. 使用system.gc()和java.lang. ...
- 安装windows 2003 server
最近去给客户安装windows 2003 server,想想也是技术,就写出来了,我这个实在虚拟机安装的,安装这个系统主要是为了安装limesurvey问卷系统 第一步:安装,选择Enter 第二步: ...
- WP8 MVVM设计模式
类似了Android里边的MVC模式, Windows Phone 有自己的Model-View-ViewModel模式,这种模式的作用就是为了Data和UI分离开来. 如果你英文较好的话,你可以不再 ...
- UVa-146 - ID Codes(下一个排列)
/* ID Codes It is 2084 and the year of Big Brother has finally arrived, albeit a century late. In or ...
- HDU1869 六度分离
/* 六度分离 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- TCP报文大小
链路层(二层)MTU最大传输单元:1500KByte.每个以太网帧64bytes-1518bytes,减去帧头(DMAC目的MAC地址48bit=6Bytes+SMAC源MAC地址48bit=6Byt ...