dfs搜索每个字母对应的数字

剪枝:

1.当一列上三个数a b c都已知时,如果 (a+b)%n!=c && (a+b+1)%n!=c 剪枝(+1是考量进位,注意&&)

2.考虑到我们根据每排数据剪枝的,我们可以改变一下搜索的顺序,按照字母从上往下,从右往左出现的顺序来搜

3.因为我们是从最低位开始搜的,而且,3个数全都是N位,所以高位数组一般较小,低位较大,所以 应该从n-1倒过来搜(高位太大和就不是N位了)

代码:

#include<iostream>
#include<cstdlib>
#include<cstring>
#define Size 30
using namespace std; int n;
int cc[][Size];
int dic[Size]={, ,,,,};
bool vis[Size]; bool row(int i){
if(dic[cc[][i]]!=-&&dic[cc[][i]]!=-&&dic[cc[][i]]!=-){
int k=dic[cc[][i]]+dic[cc[][i]];
if(k%n!=dic[cc[][i]] && (k+)%n!=dic[cc[][i]])return false;
}
return true;
} int next(){
for(int i=;i<=n;i++){
for(int j=;j<;j++){
if(dic[cc[j][i]]==-)return cc[j][i];
}
}
return n+;
} bool check(){
int dd[][Size];
for(int i=;i<;i++){
for(int j=;j<=n;j++){
dd[i][j]=dic[cc[i][j]];
}
}
int f[Size];
memset(f,,sizeof(f));
for(int i=;i<=n;i++){
f[i]+=dd[][i];f[i]+=dd[][i];
while(f[i]>=n)f[i]-=n,f[i+]++;
if(f[i]!=dd[][i])return false;
}
return true;
} void dfs(int k){
if(k>n){
if(check()){
for(int i=;i<=n;i++)cout<<dic[i]<<' ';
exit();
}
}
//jianzhi
for(int i=;i<=n;i++){//
if(!row(i))return;
} for(int i=n-;i>=;i--){
if(!vis[i]){
dic[k]=i;
vis[i]=true;
dfs(next());
vis[i]=false;
dic[k]=-;
}
}
} int main(){
freopen("1064.in","r",stdin);
memset(dic,-,sizeof(dic));
cin>>n;
char temp[Size];
for(int i=;i<;i++){
cin>>temp+;
for(int j=;j<=n;j++){
cc[i][j]=temp[n-j+]-;
}
}
dfs(next());
return ;
}
测试点#alpha1.in  结果:AC    内存使用量:  256kB     时间使用量:  1ms     
测试点#alpha10.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms
测试点#alpha2.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms
测试点#alpha3.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms
测试点#alpha4.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms
测试点#alpha5.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms
测试点#alpha6.in 结果:AC 内存使用量: 256kB 时间使用量: 31ms
测试点#alpha7.in 结果:AC 内存使用量: 256kB 时间使用量: 3ms
测试点#alpha8.in 结果:AC 内存使用量: 256kB 时间使用量: 78ms
测试点#alpha9.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms

code1064 虫食算的更多相关文章

  1. 洛谷 P1092 虫食算 Label:dfs

    题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 +8468#6633 44445509678 其中# ...

  2. 深度优先搜索 codevs 1064 虫食算

    codevs 1064 虫食算 2004年NOIP全国联赛提高组  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description 所 ...

  3. codevs1064 虫食算

    题目描述 Description 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045    +    8468#6 ...

  4. NOIP2004 虫食算

    描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子:43#9865#045+ 8468#6633= 44445506678其中#号代表 ...

  5. Codevs 1064 虫食算 2004年NOIP全国联赛提高组

    1064 虫食算 2004年NOIP全国联赛提高组 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 所谓虫食算,就是原先的算式 ...

  6. Luogu P1092 虫食算

    题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 +8468#6633 44445509678 其中# ...

  7. 【NOIP2004】【CJOJ1703】【洛谷1092】虫食算

    题面 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 +8468#6633 44445509678 ...

  8. 【NOIP2004】虫食算

    Description 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 +. 8468#6633 444455 ...

  9. 洛谷P1092 虫食算

    P1092 虫食算 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: http://paste.ubuntu.com/2544 ...

随机推荐

  1. Bash命令查找本机公网IP

    用Bash命令查找本机公网IP wget -qO - http://ipecho.net/plain; echo

  2. Linux:WebServer(Apacge)

    / + 内容:表示在文本中搜索该内容: :q!:不保存直接退出: chown  -R  imooc:imooc /data:将 /data 文件夹的权限所有人该为用户 imooc: -R:采用递归的方 ...

  3. 20165226 2017-2018-4 《Java程序设计》第9周学习总结

    20165226 2017-2018-4 <Java程序设计>第9周学习总结 教材学习内容总结 第十二章 URL类 构造方法1 try { URL url = new URL(" ...

  4. 杂项-数学软件:Maple

    ylbtech-杂项-数学软件:Maple Maple是目前世界上最为通用的数学和工程计算软件之一,在数学和科学领域享有盛誉,有“数学家的软件”之称.Maple 在全球拥有数百万用户,被广泛地应用于科 ...

  5. 杂项-Server:Serv-U

    ylbtech-杂项-Server:Serv-U Serv-U FTP Server,是一种被广泛运用的FTP服务器端软件,支持3x/9x/ME/NT/2K等全Windows系列.可以设定多个FTP服 ...

  6. 第八章 搭建hadoop2.2.0集群,Zookeeper集群和hbase-0.98.0-hadoop2-bin.tar.gz集群

    安装配置jdk,SSH 一.首先,先搭建三台小集群,虚拟机的话,创建三个 下面为这三台机器分别分配IP地址及相应的角色:集群有个特点,三台机子用户名最好一致,要不你就创建一个组,把这些用户放到组里面去 ...

  7. oracle同义词详解

    在Oracle中对用户的管理是使用权限的方式来管理的,也就是说,如果我们想使用数据库,我们就必须得有权限,但是如果是别人将权限授予了我们, 我们也是能对数据库进行操作的,但是我们必须要已授权的表的名称 ...

  8. IO模型之阻塞IO

    1. IO模型的介绍 首先我们先来熟悉下什么是 同步,异步.阻塞.非阻塞 的知识: 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞 ...

  9. CocoStudio资源区导入Plist/PSD文件

    这两种文件在使用中和普通文件稍有不同,下作简单介绍.如有不适的地方欢迎批评指正. 首先简单说一下Plist文件,Plist文件通常用于储存用户设置,也可以用于存储捆绑的信息,该功能在旧式的Mac OS ...

  10. 优化笔记:jsyhjkzqxx_D_20140916.gz

    有几张表没有权限,所以跑不起来. 目测黄色部分比较坑爹,死了n多脑细胞才看懂,又死了n多脑细胞才改出来.对5034进行了2次扫描,并多次分组排序求和.(分组和排序算法相对来说比较耗性能) 改为只扫描一 ...