POJ 2458 DFS+判重
题意:
思路:
搜+判重 嗯搞定 (听说有好多人用7个for写得….)
//By SiriusRen
#include <bitset>
#include <cstdio>0
using namespace std;
bitset<134217728>bit;
char s[17][17],vis[17][17],xx[]={1,-1,0,0},yy[]={0,0,1,-1};
int ans;
bool check(int x,int y){for(int i=0;i<4;i++){int dx=x+xx[i],dy=y+yy[i];if(dx>=0&&dy>0&&dx<5&&dy<6&&vis[dx][dy])return 1;}return 0;
}
void dfs(int x,int y,int recj,int rech,int hash){bit[hash]=1;if(recj+rech==7){if(recj>=4)ans++;return;}vis[x][y]=1;for(int i=0;i<5;i++)for(int j=1;j<=5;j++)if(check(i,j)&&!bit[hash|(1<<(i*5+j))]&&!vis[i][j]){if(s[i][j]=='J')dfs(i,j,recj+1,rech,hash|(1<<(i*5+j)));else dfs(i,j,recj,rech+1,hash|(1<<(i*5+j)));}vis[x][y]=0;
}
int main(){for(int i=0;i<7;i++)for(int j=0;j<7;j++)vis[i][j]=1;for(int i=0;i<5;i++)scanf("%s",s[i]+1);for(int i=0;i<5;i++)for(int j=1;j<=5;j++)vis[i][j]=0;for(int i=0;i<5;i++)for(int j=1;j<=5;j++)if(s[i][j]=='J')dfs(i,j,1,0,1<<(i*5+j));else dfs(i,j,0,1,1<<(i*5+j));printf("%d\n",ans);
}
转载于:https://www.cnblogs.com/SiriusRen/p/6532204.html
POJ 2458 DFS+判重相关推荐
- zcmu1133(dfs+判重)
1133: 第九章:致我们终将逝去的青春 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 28 Solved: 18 [Submit][Status] ...
- 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 ...
- poj 3131 双向搜索+hash判重
题意: 初始状态固定(朝上的全是W,空格位置输入给出),输入初始状态的空格位置,和最终状态朝上的位置,输出要多少步才能移动到,超过30步输出-1. 简析: 每一个格子有6种状态,分别是 0WRB, 1 ...
- POJ 2491 Scavenger Hunt 解题报告 再次利用map判重
这道题说的是一个路径(A->B->C->-)被拆散成很多step(B->C;A->B;-),要根据step还原路径.节点都是用string表示的. 如果用map来表示st ...
- LeetCode 491. 递增子序列(回溯+判重剪枝)
1. 题目 给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2. 示例: 输入: [4, 6, 7, 7] 输出: [[4, 6], [4, 7], [4, 6, 7] ...
- 解题报告:luogu P2272 [ZJOI2007]最大半连通子图(tarjan缩点、递推DP、hash、set判重)
这时yxc上课时讲解的截图. 一般用到tarjan算法的题目步骤都非常相似: tarjan算法 缩点,建图(这里要判重) 按照拓扑序递推(这里缩点以后逆向就已经是拓扑序了)/ 循环遍历新图求解答案. ...
- A - 棋盘问题 POJ - 1321(dfs)
A - 棋盘问题 POJ - 1321 dfs 复杂度计算: dfs共进行a步,每步需要循环n次,复杂度为 a^n次方 首先是暴力 an*n,果然炸了 #include<cstdio> # ...
- POJ1465 Multiple——Bfs+余数判重——Pku1465
这道题精在判重优化.因为如果存在两个数A.B,且满足A mod n=B mod n=C,那么,这两种情况可以看做是重复的,保留较小数即可.具体优化,开一个布尔数组即可. 特别需要注意一点:如果n=0, ...
- codevs 1004 四子连棋 BFS、hash判重
004 四子连棋 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色 ...
最新文章
- 根据条件查找数组中的一条数据并放入缓存
- 1024 科学计数法 (20 分)(c语言)
- Dws同步mysql数据_数据库技术丨GaussDB(DWS)数据同步状态查看方法
- LeetCode 298. 二叉树最长连续序列(自顶向下)
- centos7源码安装mysql8.0_CentOS7下源码安装MySQL 8.x
- 16 分频 32 分频是啥意思_CD4017是什么?十进制计数器分频器CD4017的逻辑功能呢?...
- 解决sql脚本文件太大无法打开的问题
- 1661Help Jimmy
- 自然环境资源数据集分享——资源环境数据云平台
- 计算机中丢失msvcr71.dll 问题解决
- POJ1723士兵站队问题
- 如何进行拼图?拼图其实很简单
- selenium IDE 遇到 Preparing to run your test 问题的解决
- UITT私有化自动跟单系统
- 留学目的地选择之亚利桑那州
- 计算机凭据分配在哪里,电脑策略没有凭据分配怎么办
- 孙悟空吃蟠桃c语言编程,孙悟空吃蟠桃
- 你知道怎么判断NB-IOT的网络信号吗
- mysql5.7驱动(tableau,excel)
- 超过十分之一的报告篇幅给语音,互联网女皇为何看好麦克风?