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 博士拿出 ...
随机推荐
- js中去掉字符串中的某个指定字符
假设一个data里面的数据是[tian,12],现在去掉[],代码如下 data=data.replace("[",""); data=data.replace ...
- jeecg中List页面标签的用法
1.t:datagrid的常用属性 1. <t:datagrid name="jeecgDemoList" checkbox="true" sortNam ...
- HotSpot Stop-and-Copy GC
rednaxelafx的Cheney算法的伪代码.如果不用forwarding的话,维护一个旧地址到新地址的映射也可以. 其中重点部分: void Heap::collect() { // The f ...
- github打不开问题
修改host 185.31.17.184 github.global.ssl.fastly.net 207.97.227.239 http://github.com 65.74.177.129 htt ...
- 安装Elastix-2.4版本
首先,下载Elastix地址:http://www.elastix.org,下载里面的2.4版本 第一步:选择安装,Enter 选择语言,默认就行 选择us,默认 选择全部 选择默认分区,点击OK 配 ...
- Oracle ASM操作管理
查看ASM磁盘情况 SQL> select group_number,disk_number,mount_status,header_status,mode_status,state,failg ...
- Django模型层
ORM简介: MVC或者MTV框架中包括一个重要的部分就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工 ...
- XML---Studying
XML 被设计用来传输和存储数据. HTML 被设计用来显示数据. 1.什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类 ...
- 28_java之mysql的CRUD
01数据库概念 * A: 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作. * B: 什么是数据 ...
- Linux HDD information (SATA/SCSI/SAS/SSD)
举例一: [reistlin@reistlin.com ~]$ cat /proc/scsi/scsi | grep Model Vendor: ATA Model: OCZ-VERTEX2 3.5 ...