问题 B: 奇怪的电梯

时间限制: 1 Sec  内存限制: 128 MB
[命题人:admin]

题目描述

  1. 大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki0<=Ki<=N)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:3 3 1 2 5代表了KiK1=3,K2=3,……),从一楼开始。在一楼,按“上”可以到4楼,按“下”是不起作用的,因为没有-2楼。那么,从A楼到B楼至少要按几次按钮呢?

输入

输入文件共有二行,第一行为三个用空格隔开的正整数,表示N,A,B(1≤N≤200, 1≤A,B≤N),第二行为N个用空格隔开的正整数,表示Ki。

输出

输出文件仅一行,即最少按键次数,若无法到达,则输出-1。

样例输入 Copy

  1. 5 1 5
  2. 3 3 1 2 5

样例输出 Copy

  1. 3
  1. #include<cstdio>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<map>
  5. #include <math.h>
  6. #include<bits/stdc++.h>
  7. using namespace std;
  8. typedef long long ll;
  9. inline int read()
  10. {
  11. int x=,f=;char ch=getchar();
  12. while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
  13. while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  14. return x*f;
  15. }
  16. const int INF=0x3f3f3f3f;
  17. const int maxn=1e5+;
  18. int n,en,be;
  19. int a[maxn];
  20. int ej[maxn];//摁键数
  21. void inint(){
  22. cin>>n>>be>>en;
  23. for(int i=;i<=n;i++){
  24. cin>>a[i];
  25. ej[i]=-;
  26. }
  27. ej[be]=;
  28. }
  29. int main(){
  30. inint();
  31. int p=;
  32. int flag=;
  33. while(ej[en]==-&&flag){
  34. flag=;
  35. for(int i=;i<=n;i++){//每一次找可以转移的状态
  36. if(ej[i]==p){//如第一次找p=0,第二次找p=1的
  37. int j=i+a[i];//如果flag=0说明不能到输出-1
  38. if(j<=n&&ej[j]==-){
  39. ej[j]=p+;
  40. flag=;
  41. }
  42. j=i-a[i];
  43. if(j>&&ej[j]==-){
  44. ej[j]=p+;
  45. flag=;
  46. }
  47. }
  48. }
  49. p++;
  50. }
  51. printf("%d",ej[en]);
  52. }

AC代码2:dfs

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<map>
  5. #include <math.h>
  6. #include<bits/stdc++.h>
  7. using namespace std;
  8. typedef long long ll;
  9. inline int read()
  10. {
  11. int x=,f=;char ch=getchar();
  12. while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
  13. while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  14. return x*f;
  15. }
  16. const int INF=0x3f3f3f3f;
  17. const int maxn=1e5+;
  18. int n,m,k,s=INF;
  19. int a[maxn];
  20. int b[maxn];
  21. void inint(){
  22. cin>>n>>m>>k;
  23. for(int i=;i<=n;i++){
  24. cin>>a[i];
  25. }
  26. b[m]=;
  27. }
  28. void dfs(int now,int num){
  29. if(now==k){
  30. s=min(s,num);
  31. }
  32. else if(num<=s){
  33. b[now]=;
  34. if(now+a[now]<=n&&b[now+a[now]]==){
  35. dfs(now+a[now],num+);
  36. }
  37. if(now-a[now]>=&&b[now-a[now]]==){
  38. dfs(now-a[now],num+);
  39. }
  40. b[now]=;
  41. }
  42. }
  43. int main(){
  44. inint();
  45. dfs(m,);
  46. if(s==INF){
  47. printf("-1\n");
  48. }
  49. else{
  50. printf("%d",s);
  51. }
  52. return ;
  53. }
  1.  

问题 B: 奇怪的电梯的更多相关文章

  1. luogu[1135]奇怪的电梯

    题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开 ...

  2. TYVJ P3522 &&洛谷 P1135 奇怪的电梯 Label:bfs

    题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开 ...

  3. 奇怪的电梯(HDU1548) (Dijkstra)或者(BFS)

    问题 E: 奇怪的电梯 时间限制: 1 Sec  内存限制: 64 MB提交: 35  解决: 16[提交][状态][讨论版] 题目描述 有一天桐桐做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都 ...

  4. P1135 奇怪的电梯 dp

    题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第ii层楼(1 \le i \le N)(1≤i≤N)上有一个数字K_i(0 \le K_i \le N)K ...

  5. 洛谷 P1135 奇怪的电梯 【基础BFS】

    题目链接:https://www.luogu.org/problemnew/show/P1135 题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第 i 层 ...

  6. 洛谷 P1135 奇怪的电梯

    题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开 ...

  7. P1135 奇怪的电梯

    题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开 ...

  8. 【DFS】奇怪的电梯

    奇怪的电梯 题目描述 有一天桐桐做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1≤i≤N)上有一个数字K:(0≤Ki≤N).电梯只有四 个按钮:开,关,上,下.上下的层 ...

  9. 洛谷P1135 奇怪的电梯

    题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼 (1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮: ...

  10. 洛谷 P1135 【奇怪的电梯】

    题库 :洛谷 题号 :1135 题目 :奇怪的电梯 link :https://www.luogu.org/problemnew/show/P1135 一. 动态规划 : 思路 :这道题用动规来解决其 ...

随机推荐

  1. 使用mysql8.+版本,使用mybatis的代码生成工具:mybatis-generator连接数据库时Unknown initial character set index '255' received from server. Initial client character set can be forced via the 'characterEncoding' property.

    Error connecting to database: (using class org.gjt.mm.mysql.Driver)Unknown initial character set ind ...

  2. SQL Server Varchar 中文乱码问题与使用SQL Server Management Studio管理软件查询出来的字段限制

    问题:不管是用varchar 还是nvarchar,插入记录为中文时,都会显示乱码?? 即使建表时指明了某个字段的语言也没用 COLLATE Chinese_PRC_CS_AS_WS 原因:可能是安装 ...

  3. Wannafly Winter Camp 2020 Day 5H Geometry PTSD - 构造,计算几何

    Solution 考虑如何计算点到平面的距离,我们可以用行列式算出锥形的体积和底面的面积,来得到距离 考虑构造一个等边三角形,这样基本是满足 \(\geq 1.7\) 的条件的 于是我们对它的坐标枚举 ...

  4. 0级搭建类003-CentOS Linux安装 (CentOS 7)公开

    项目文档引子系列是根据项目原型,制作的测试实验文档,目的是为了提升项目过程中的实际动手能力,打造精品文档AskScuti. 项目文档引子系列目前不对外发布,仅作为博客记录.如学员在实际工作过程中需提前 ...

  5. Docker最全教程——从理论到实战(十六)

    前言 与其他语言相比,Go非常值得推荐和学习,真香!为什么?主要是可以直接编译成机器代码(性能优越,体积非常小,可达10来M,见实践教程图片)而且设计良好,上手门槛低.本篇主要侧重于讲解了Go语言的优 ...

  6. 2019-08-23 纪中NOIP模拟A组

    T1 [JZOJ2908] 矩阵乘法 题目描述 给你一个 N*N 的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第 K 小数. 数据范围 对于 $20\%$ 的数据,$N \leq 100$,$Q ...

  7. pandas时间序列学习笔记

    目录 创建一个时间序列 pd.date_range() info() asfred() shifted(),滞后函数 diff()求差分 加减乘除 DataFrame.reindex() 通过data ...

  8. UnicodeDecodeError: 'gbk' codec can't decode byte 0xfe in position 45: illegal multibyte sequence

    常见的一种解码错误如题目所示,下面介绍该错误的解决方法 (1).首先在打开文本的时候,设置其编码格式,如:open(‘1.txt’, encoding=’gbk’): (2).若(1)不能解决,可能是 ...

  9. 假期学习【九】首都之窗百姓信件爬取代码优化以及处理 2020.2.7 Python

    今天对爬取程序进行了优化,修正了错误. 遇到了两个问题与错误: 1.忘记了对文件的读写设置格式,导致导入Hive数据库无法正常显示以及写入. 2.文件的读写操作有误导致数据量仅有应该有的1/2 不完整 ...

  10. 记录 Docker 的学习过程 (dockerfile自动制作镜像)

    自动制作镜像 通过编写dockerfile来自动创建镜像 #vi Dockerfile #编辑dockerfile文件,一定要以这个名字命名 #cat Dockerfile #导入哪个基础镜像FROM ...