题意:





思路:

搜+判重 嗯搞定 (听说有好多人用7个for写得….)

  1. //By SiriusRen
  2. #include <bitset>
  3. #include <cstdio>0
  4. using namespace std;
  5. bitset<134217728>bit;
  6. char s[17][17],vis[17][17],xx[]={1,-1,0,0},yy[]={0,0,1,-1};
  7. int ans;
  8. bool check(int x,int y){
  9. for(int i=0;i<4;i++){
  10. int dx=x+xx[i],dy=y+yy[i];
  11. if(dx>=0&&dy>0&&dx<5&&dy<6&&vis[dx][dy])return 1;
  12. }
  13. return 0;
  14. }
  15. void dfs(int x,int y,int recj,int rech,int hash){
  16. bit[hash]=1;
  17. if(recj+rech==7){
  18. if(recj>=4)ans++;
  19. return;
  20. }
  21. vis[x][y]=1;
  22. for(int i=0;i<5;i++)
  23. for(int j=1;j<=5;j++)
  24. if(check(i,j)&&!bit[hash|(1<<(i*5+j))]&&!vis[i][j]){
  25. if(s[i][j]=='J')dfs(i,j,recj+1,rech,hash|(1<<(i*5+j)));
  26. else dfs(i,j,recj,rech+1,hash|(1<<(i*5+j)));
  27. }
  28. vis[x][y]=0;
  29. }
  30. int main(){
  31. for(int i=0;i<7;i++)for(int j=0;j<7;j++)vis[i][j]=1;
  32. for(int i=0;i<5;i++)scanf("%s",s[i]+1);
  33. for(int i=0;i<5;i++)for(int j=1;j<=5;j++)vis[i][j]=0;
  34. for(int i=0;i<5;i++)
  35. for(int j=1;j<=5;j++)
  36. if(s[i][j]=='J')dfs(i,j,1,0,1<<(i*5+j));
  37. else dfs(i,j,0,1,1<<(i*5+j));
  38. printf("%d\n",ans);
  39. }

POJ 2458 DFS+判重的更多相关文章

  1. UVa 10400 - Game Show Math 游戏中的数学 dfs+判重

    题意:给出一些数字和一个目标数字,要求你在数字间添加+-*/,让表达式能达到目标数字,运算符号的优先级都是一样的. 由于数据量很大,本来想用map<string>判重的,结果还是超时了,然 ...

  2. HDU2579--Dating with girls(2)--(DFS, 判重)

    Dating with girls(2) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  3. The Unique MST POJ - 1679 最小生成树判重

    题意:求一个无向图的最小生成树,如果有多个最优解,输出"Not Unique!" 题解: 考虑kruskal碰到权值相同的边: 假设点3通过边(1,3)连入当前所维护的并查集s. ...

  4. poj 1564 Sum It Up | zoj 1711 | hdu 1548 (dfs + 剪枝 or 判重)

    Sum It Up Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Sub ...

  5. 【DFS+小操作判重】【HDU2610+HDU2611】Sequence

    题意 2610 按照长度优先 位置次之 输出所有不递减序列 2611 按照长度优先 大小次之 输出所有不递减序列 题解不写了 来源于http://www.cnblogs.com/wally/archi ...

  6. poj 3131 双向搜索+hash判重

    题意: 初始状态固定(朝上的全是W,空格位置输入给出),输入初始状态的空格位置,和最终状态朝上的位置,输出要多少步才能移动到,超过30步输出-1. 简析: 每一个格子有6种状态,分别是 0WRB, 1 ...

  7. POJ 1945 暴搜+打表 (Or 暴搜+判重)

    思路: 呃呃 暴搜+打表 暴搜的程序::稳稳的TLE+MLE (但是我们可以用来打表) 然后我们就可以打表过了 hiahiahia 可以证明最小的那个数不会超过200(怎么证明的我也不知道),然后就直 ...

  8. hdu 2610 2611 dfs的判重技巧

    对于全排列枚举的数列的判重技巧 1:如果查找的是第一个元素 那么 从0开始到当前的位置看有没有出现过这个元素 出现过就pass 2: 如果查找的不是第一个元素 那么 从查找的子序列当前位置的前一个元素 ...

  9. poj 1465 Multiple(bfs+余数判重)

    题意:给出m个数字,要求组合成能够被n整除的最小十进制数. 分析:用到了余数判重,在这里我详细的解释了.其它就没有什么了. #include<cstdio> #include<cma ...

随机推荐

  1. 1570. [POJ3461]乌力波

    ★☆   输入文件:oulipo.in   输出文件:oulipo.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 法国作家乔治·佩雷克(Georges Perec,1 ...

  2. View的双击动作

    有时在android中需要为某一控件设置双击监听,实现也挺简单,自己动手吧.编码永远不是问题,思路才是最重要. public class DoubleClickDemo extends Activit ...

  3. Servlet设置Cookie无效

    项目中保存用户信息用到了Cookie,之前没有太注意,今天怎么设置Cookie都无效,断点跟了无数遍,都没有找出问题所在,明明发送Cookie的代码都有执行,可是愣是找不到Cookie发送到哪里去了, ...

  4. UVa 1600 Patrol Robot【BFS】

    题意:给出一个n*m的矩阵,1代表墙,0代表空地,不能连续k次穿过墙,求从起点到达终点的最短路的长度 给vis数组再加一维状态,表示当前还剩下的能够穿越的墙的次数,每次碰到墙,当前的k减去1,碰到0, ...

  5. python读取word文档

    周末需要做一个统计word文档字数的问题,刚开始以为很简单,因为之前做过excel表格相关的任务,所以认为利用扩展模块应该比较简单. 通过搜索,确实搜到了一个python操作word的模块,pytho ...

  6. kubernetes学习与实践篇(一)主要概念介绍

    什么是kubernetes Kubernetes是Google开源的容器集群管理系统,实现基于Docker构建容器,利用Kubernetes能很方面管理多台Docker主机中的容器. 主要功能 将多台 ...

  7. [NOIP2009提高组]最优贸易

    题目:洛谷P1073.Vijos P1754.codevs1173. 题目大意:有n点m边的图,边分有向和无向.每个点有一个价格,用这个价格可以买入或卖出一个东西.一个人从1出发,要到n,途中可以买入 ...

  8. PKU 3311 Hie with the Pie 状态DP

    Floyd + 状态DP Watashi的板子 #include <cstdio> #include <cstring> #include <iostream> # ...

  9. 使用ssh过程中对数据库进行update时报错

    报错信息:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in ...

  10. 4.菜鸟教你一步一步开发 web service 之 axis 客户端创建

    转自:https://blog.csdn.net/shfqbluestone/article/details/37723517 在上个教程中我们创建了一个 axis 服务端的 web service ...