zoukankan      html  css  js  c++  java
  • 奇怪的电梯

    题目描述

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

    输入

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

    输出

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

    样例输入

    5 1 5
    3 3 1 2 5

    样例输出

    3
     

    数据范围限制

     
     
     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 int a[1010];
     5 bool b[1010];
     6 void f(int ,int );
     7 int n,m,w,in=9999;
     8 int main()
     9 {
    10     cin>>w>>n>>m;
    11     for(int i=1;i<=w;++i)
    12         scanf("%d",&a[i]);
    13     f(n,0);
    14     if(in==9999)cout<<"-1";
    15     else cout<<in;
    16     return 0;
    17 }
    18 void f(int ow,int st)
    19 {
    20     if(st>in)return ;
    21     if(ow==m)
    22     {
    23         if(st<in)in=st;
    24         return ;
    25     }
    26     else {
    27     if(ow==m){if(st<in)in=st;return ;}
    28     b[ow]=true ;
    29     if(ow + a[ow] <=w &&b[ow+a[ow]]==0)
    30         f(ow + a[ow],st+1);
    31     if(ow - a[ow] > 0 &&b[ow-a[ow]]==0)
    32         f(ow - a[ow],st+1);
    33     b[ow]=false;
    34     }
    35 }
  • 相关阅读:
    GNOME3启动时出错:Oh no! Something has gone wrong.Logout!
    设计模式之迭代器模式
    C#中多线程 委托的使用
    python的memcache使用如果对key设置了一个int型
    Linux select TCP并发服务器与客户端编程
    G++ 教程(转)
    汉语-词语:卓识
    汉语-词语:决断
    汉语-词语:远见
    汉语-词语:胆识
  • 原文地址:https://www.cnblogs.com/mjtcn/p/6648407.html
Copyright © 2011-2022 走看看