http://oj.jxust.edu.cn/contest/problem?id=1563&pid=4

题目描述

公元9012年,Q博士发明了一部太空电梯,与一般电梯不同,太空电梯不能直接到达目点。太空电梯只有上升和下降两个按键,如果电梯上升,
它只能上升当前高度的距离;如果下降,它一次只能下降1米的距离。
为了使大家都能上太空去玩耍,Q博士想请你根据电梯的工作原理,计算到达目的点最少需要按几次按键

输入

多组输入

每组输入有两个数n和m(1<=n,m<=10^7),表示当前高度n和目的点m

输出

输出计算结果

样例输入

  1. 4 6
  2. 10 1
    255 999999

样例输出

  1. 2
  2. 9
    28
    题意:电梯有两个按钮 一个是上升目前高度的按钮 另一个是下降1个高度的按钮。
    如何从起始高度到达目标高度并要求求出按最少次按钮的次数。
  3.  
  4. 我一开始想的是用dfs,我就去看了下分别在什么情况下使用dfsbfs
    dfs特点:可以不重不漏的枚举所有可以到达目标状态的路径。(回溯思想 枚举思想)
  5.  
  6. bfs特点:效率较高,适合于找一条最快到达目标状态的路径。(发散思想)
  1. //#include <bits/stdc++.h>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <algorithm>
  6. #include <iostream>
  7. #include <algorithm>
  8. #include <iostream>
  9. #include <cstdio>
  10. #include <string>
  11. #include <cstring>
  12. #include <stdio.h>
  13. #include <queue>
  14. #include <stack>
  15. #include <map>
  16. #include <set>
  17. #include <string.h>
  18. #include <vector>
  19. #define ME(x , y) memset(x , y , sizeof(x))
  20. #define SF(n) scanf("%d" , &n)
  21. #define rep(i , n) for(int i = 0 ; i < n ; i ++)
  22. #define INF 0x3f3f3f3f
  23. #define mod 1000000007
  24. using namespace std;
  25. typedef long long ll ;
  26. int n , m ;
  27. int vis[] , ans[];
  28.  
  29. int bfs()
  30. {
  31. queue<int>q;
  32. vis[n] = ;
  33. q.push(n);
  34. if(m % == )
  35. {
  36. m++ ;
  37. ans[m]++;
  38. }
  39. while(!q.empty())
  40. {
  41. int x = q.front();
  42. q.pop();
  43. if(x == m)
  44. {
  45. return ans[m];
  46. }
  47. if(x* <= m && !vis[x*])
  48. {
  49. vis[*x] = ;
  50. ans[*x] += ans[x] + ;
  51. q.push(*x);
  52. }
  53. if(x - > && !vis[x-])
  54. {
  55. vis[x-] = ;
  56. ans[x-] += ans[x] + ;
  57. q.push(x-);
  58. }
  59. }
  60. }
  61. int main()
  62. {
  63. while(~scanf("%d%d" , &n ,&m))
  64. {
  65. memset(ans, , sizeof(ans));
  66. memset(vis , , sizeof(vis));
  67. if(n < m)
  68. cout << bfs() << endl ;
  69. else
  70. {
  71. cout << n - m << endl ;
  72. }
  73. }
  74.  
  75. return ;
  76. }

刷题后感:标记查找过的点是bfs 和 dfs 的重要部分。

  1.  

bfs(太空电梯)的更多相关文章

  1. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  2. 【BZOJ-1656】The Grove 树木 BFS + 射线法

    1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 186  Solved: 118[Su ...

  3. POJ 3278 Catch That Cow(bfs)

    传送门 Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 80273   Accepted: 25 ...

  4. POJ 2251 Dungeon Master(3D迷宫 bfs)

    传送门 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28416   Accepted: 11 ...

  5. Sicily 1215: 脱离地牢(BFS)

    这道题按照题意直接BFS即可,主要要注意题意中的相遇是指两种情况:一种是同时到达同一格子,另一种是在移动时相遇,如Paris在(1,2),而Helen在(1,2),若下一步Paris到达(1,1),而 ...

  6. Sicily 1048: Inverso(BFS)

    题意是给出一个3*3的黑白网格,每点击其中一格就会使某些格子的颜色发生转变,求达到目标状态网格的操作.可用BFS搜索解答,用vector储存每次的操作 #include<bits/stdc++. ...

  7. Sicily 1444: Prime Path(BFS)

    题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 #include<bits/stdc++.h& ...

  8. Sicily 1051: 魔板(BFS+排重)

    相对1150题来说,这道题的N可能超过10,所以需要进行排重,即相同状态的魔板不要重复压倒队列里,这里我用map储存操作过的状态,也可以用康托编码来储存状态,这样时间缩短为0.03秒.关于康托展开可以 ...

  9. Sicily 1150: 简单魔板(BFS)

    此题可以使用BFS进行解答,使用8位的十进制数来储存魔板的状态,用BFS进行搜索即可 #include <bits/stdc++.h> using namespace std; int o ...

随机推荐

  1. 2、dubbo基础知识

    1.简介 2.dubbo架构 3.dubbo环境搭建 注意:cmd命令都是在bin目录的地址栏直接输入 xxx.cmd 4.配置dubbo-admin 步骤一: 步骤二: 步骤三: 步骤四: 步骤五: ...

  2. Oracle实现分页,每页有多少条记录数

    分页一直都是关系数据库的热门,在数据量非常多的情况下,需要根据分页展示,每页展示多少条记录,以此减轻数据的压力; 1实现原理,根据rownum取记录数,根据公式(页数-1)*每页想要展示的记录数 AN ...

  3. css基础(浮动 清除f浮动)

    文档流(标准流) 1.元素自上而下,自左而右  2.块元素,独占一行,行内元素在一行上显示,碰到父级元素的边框换行   浮动left 浮动的框可以向左或是向右移动,直到它的边缘碰到包含框或是另个浮动框 ...

  4. BZOJ2208连通数

    还是挺简单的tarjan. 判断时可能重复,直接bitset搞定. 首先tarjan缩点,每个scc的内部肯定能互相到达,更一下,而且一个scc里的各个点的贡献肯定是一样的,topsort,更新答案就 ...

  5. Linux上Python的安装升级

    1.下载 cd /usr/local/src/ wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz 2.安装,在/usr/loc ...

  6. python hash 每次调用结果不一样

    import time import multiprocessing device = ['3695a1c7-0fa6-4fa8-a563-8fd462c04af5', '0dfdd431-f9bc- ...

  7. 转自网络用LIBSVM进行回归预测的粗浅认识————————作者师梦

    说一说我对用LIBSVM进行回归预测的粗浅认识(整理完成于2012年5.11) 作者 :  师梦       吾本工程小硕一枚,前用matlab建模,已然完成.某日,正沾沾自喜之际,吾师曰:“汝已为之 ...

  8. LC 650. 2 Keys Keyboard

    Initially on a notepad only one character 'A' is present. You can perform two operations on this not ...

  9. LC 662. Maximum Width of Binary Tree

    Given a binary tree, write a function to get the maximum width of the given tree. The width of a tre ...

  10. NAT地址转换常用命令详解

    缺省值:没有启用NAT. 命令模式:全局配置模式. 说明:静态NAT主要用于那些对需要对外部用户开放的服务,如Web服务器等,它可以把本地地址映射为指定的全局地址. 第一种格式实现的是一对一的NAT映 ...