ACM: HDU 2563 统计问题-DFS+打表
Description
1、 每次只能移动一格;
2、 不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走);
3、 走过的格子立即塌陷无法再走第二次;
求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。
Input
接下来的C行,每行包含一个整数n (n<=20),表示要走n步。
Output
每组的输出占一行。
Sample Input
- 2
- 1
- 2
Sample Output
- 3
- 7
- /*/
- 中文题,有点类似以前做过的小蜜蜂那题,规定一个方向后只能沿着三个方向去移动了。
- 所以每次移动只有3种方向可以走,而且还要标记是否已经走过这条路,所以思路很清楚直接DFS。
- 但是DFS会TLE,输入的数字在1~20,数据不多,直接打表。
- AC代码:
- /*/
- #include"map"
- #include"cmath"
- #include"string"
- #include"cstdio"
- #include"vector"
- #include"cstring"
- #include"iostream"
- #include"algorithm"
- using namespace std;
- typedef long long LL;
- const int MX=202;
- #define memset(x,y) memset(x,y,sizeof(x))
- #define FK(x) cout<<"【"<<x<<"】"<<endl
- int step,ans;
- bool vis[MX][MX];
- int ans2[22]= {0,3,7,17,41,99,239,577,1393,3363,8119,19601,47321,114243,275807,665857,1607521,3880899,9369319,22619537,54608393,0};
- //因为DFS全部计算后会超时,而且输入只有1-20,所以直接打出全部的数表
- void DFS(int dir,int x,int y,int tot) {
- if(tot==step) { //如果步数已经达到了就计数。
- // FK("YES"<<x<<","<<y<<","<<tot); //确认
- ans++;
- return ;
- }
- for(int i=1; i<=3; i++) {
- if(i==1)x++; //每种情况对应的位移。
- if(i==2)y++;
- if(i==3)x--;
- if(!vis[x][y]) {
- vis[x][y]=1;//标记已经塌陷的路
- tot++;
- DFS(i,x,y,tot);
- vis[x][y]=0;
- tot--;
- }
- if(i==1)x--;
- if(i==2)y--;
- if(i==3)x++;
- }
- }
- int main() {
- int T,x;
- scanf("%d",&T);
- while(T--) {
- scanf("%d",&x);/*这里是打表之后加上的*/
- // for(step=1; step<=20; step++) {
- // ans=0;
- // memset(vis,0);
- // vis[100][100]=1;//起点已经塌陷
- // for(int i=1; i<=3; i++) {
- // int xx=100,yy=100;//起点开始,向三个可行方向去深搜
- // if(i==1)xx++;
- // if(i==2)yy++;
- // if(i==3)xx--;
- // vis[xx][yy]=1;//标记路已经塌陷
- // DFS(i,xx,yy,1);
- // vis[xx][yy]=0;
- //
- // }
- printf("%d\n",ans2[x]);
- // }
- }
- return 0;
- }
ACM: HDU 2563 统计问题-DFS+打表的更多相关文章
- HDU 2563 统计问题 (DFS + 打表)
统计问题 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 2563 统计问题(递推)
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=2563 将向上移的步数设为a[n],将向左右移的步数设为b[n],有a[n]=a[n-1]+b[n-1 ...
- HDU 2563 统计问题 (递推)
A - 统计问题 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Sta ...
- [ACM] hdu 1251 统计难题 (字典树)
统计难题 Problem Description Ignatius近期遇到一个难题,老师交给他非常多单词(仅仅有小写字母组成,不会有反复的单词出现),如今老师要他统计出以某个字符串为前缀的单词数量(单 ...
- hdu 2510 符号三角形 (DFS+打表)
符号三角形 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdu 2563 统计问题
统计问题 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- HDU 2563 统计问题(递归,思维题)
统计问题 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 2586 How far away(dfs+邻接表)
How far away [题目链接]How far away [题目类型]dfs+邻接表 &题意: 题目大意:一个村子里有n个房子,这n个房子用n-1条路连接起来,接下了有m次询问,每次询问 ...
- hdu 4707 Pet(DFS水过)
http://acm.hdu.edu.cn/showproblem.php?pid=4707 [题目大意]: Lin Ji 的宠物鼠丢了,在校园里寻找,已知Lin Ji 在0的位置,输入N D,N表示 ...
随机推荐
- .net学习笔记----有序集合SortedList、SortedList<TKey,TValue>、SortedDictionary<TKey,TValue>
无论是常用的List<T>.Hashtable还是ListDictionary<TKey,TValue>,在保存值的时候都是无序的,而今天要介绍的集合类SortedList和S ...
- vim、gvim加载文件慢
1. strace -f -T -o vim.strace vim 2. vim --startuptime "vim-time.txt" 3. gvim -f
- markdown编辑器使用建议
markdown在线编辑器: https://stackedit.io/editorhttp://dillinger.io/ windows 下建议使用 MarkdownPad linux 下建议使用 ...
- poj 3984:迷宫问题(广搜,入门题)
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7635 Accepted: 4474 Description ...
- node 初识
跟随startup engineering 已经到了week2了,目前为止课程都没有详细介绍node,恐怕以后也不会讲得太细,只是罗列出了一堆阅读材料供你自学.花了点时间阅读些许,在此做个墨迹. Ho ...
- Linux發送郵件
1.直接使用shell當編輯器 [root@phburdb1 mail]# mail -s "Hello World" juncai.chen@innolux.comHello j ...
- 向Word模板中填充数据
现在有这样的需求,给Word文档的指定位置填充上特定数据,例如我们有一个终端,用来打印员工的薪资证明,对于一个公司来说,他的薪资证明模板是固定的,变化的地方是员工姓名,部门,职位等.我们只需要将这些指 ...
- Zigzag convert
public static String Convert(String s,int row) { char[] c=s.toCharArray(); int len=s.length(); Strin ...
- 【SSH】 之 Struts2环境搭建及简单应用开发
在上一篇文章中,我们一起了解了一下struts2的工作机制原理,接下来让我们进行一下简单应用的开发 (一)配置环境 1.建立web项目 2.导入jar包 其中struts2中有很多jar包,我们不需要 ...
- SQLServer批量创建有规则的数据
根据需求要生成从kkk001,kkk002开始的100个递增账号 手插要死人的,用SQL脚本轻松完成: declare @a int ) ) begin ) ) end declare:申明变量, @ ...