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

剪枝:

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

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

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

代码:

  1. #include<iostream>
  2. #include<cstdlib>
  3. #include<cstring>
  4. #define Size 30
  5. using namespace std;
  6.  
  7. int n;
  8. int cc[][Size];
  9. int dic[Size]={, ,,,,};
  10. bool vis[Size];
  11.  
  12. bool row(int i){
  13. if(dic[cc[][i]]!=-&&dic[cc[][i]]!=-&&dic[cc[][i]]!=-){
  14. int k=dic[cc[][i]]+dic[cc[][i]];
  15. if(k%n!=dic[cc[][i]] && (k+)%n!=dic[cc[][i]])return false;
  16. }
  17. return true;
  18. }
  19.  
  20. int next(){
  21. for(int i=;i<=n;i++){
  22. for(int j=;j<;j++){
  23. if(dic[cc[j][i]]==-)return cc[j][i];
  24. }
  25. }
  26. return n+;
  27. }
  28.  
  29. bool check(){
  30. int dd[][Size];
  31. for(int i=;i<;i++){
  32. for(int j=;j<=n;j++){
  33. dd[i][j]=dic[cc[i][j]];
  34. }
  35. }
  36. int f[Size];
  37. memset(f,,sizeof(f));
  38. for(int i=;i<=n;i++){
  39. f[i]+=dd[][i];f[i]+=dd[][i];
  40. while(f[i]>=n)f[i]-=n,f[i+]++;
  41. if(f[i]!=dd[][i])return false;
  42. }
  43. return true;
  44. }
  45.  
  46. void dfs(int k){
  47. if(k>n){
  48. if(check()){
  49. for(int i=;i<=n;i++)cout<<dic[i]<<' ';
  50. exit();
  51. }
  52. }
  53. //jianzhi
  54. for(int i=;i<=n;i++){//
  55. if(!row(i))return;
  56. }
  57.  
  58. for(int i=n-;i>=;i--){
  59. if(!vis[i]){
  60. dic[k]=i;
  61. vis[i]=true;
  62. dfs(next());
  63. vis[i]=false;
  64. dic[k]=-;
  65. }
  66. }
  67. }
  68.  
  69. int main(){
  70. freopen("1064.in","r",stdin);
  71. memset(dic,-,sizeof(dic));
  72. cin>>n;
  73. char temp[Size];
  74. for(int i=;i<;i++){
  75. cin>>temp+;
  76. for(int j=;j<=n;j++){
  77. cc[i][j]=temp[n-j+]-;
  78. }
  79. }
  80. dfs(next());
  81. return ;
  82. }
  1. 测试点#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. FPGA之外,了解一下中断

    中断是什么? 中断的汉语解释是半中间发生阻隔.停顿或故障而断开.那么,在计算机系统中,我们为什么需要“阻隔.停顿和断开”呢? 举个日常生活中的例子,比如说我正在厨房用煤气烧一壶水,这样就只能守在厨房里 ...

  2. mysql实战优化之一:sql优化

    1.选取最适用的字段属性 MySQL 可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得 ...

  3. SpingData 的学习

    Spring Data : Spring 的一个子项目,类似于Sping MVC 一样是Spring的另一个模块,所以还需要下载其jar ,它需要的jar有: spring-data-jpa-1.11 ...

  4. video2gift环境安装(Theano等)

    pip install Theano http://deeplearning.net/software/theano/install_centos6.html pip install moviepy ...

  5. MySql——查询题目练习

    本次查询我们基于这几张表查询 ***********查询练习********** 1. 查询Student表中的所有记录的Sname.Ssex和Class列. select sname,ssex,cl ...

  6. 自动化运维工具Ansible的简单使用

    一 基础使用 1. 简介ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置. ...

  7. 关于mongodb ,redis,memcache之间见不乱理还乱的关系和作用

    先说我自己用的情况: 最先用的memcache ,用于键值对关系的服务器端缓存,用于存储一些常用的不是很大,但需要快速反应的数据 然后,在另一个地方,要用到redis,然后就去研究了下redis. 一 ...

  8. 3_python之路之商城购物车

    python之路之商城购物车 1.程序说明:Readme.txt 1.程序文件:storeapp_new.py userinfo.py 2.程序文件说明:storeapp_new.py-主程序 use ...

  9. Linux更换jdk版本的一些问题

    111111111111111111111111111111111111111111111111111111111111111111111111 在服务器上更新了新的 jdk,也在 /etc/prof ...

  10. Tkinter Label(标签)

      Tkinter Label : 这个小工具,实现了显示框,在那里你可以把文本或图像.这个widget中显示的文本可以在任何时候你想要更新.   这个小工具,实现了显示框,在那里你可以把文本或图像. ...