zoukankan      html  css  js  c++  java
  • C语言 · 超级玛丽

    算法提高 超级玛丽  
    时间限制:1.0s   内存限制:256.0MB
        
    问题描述
      大家都知道"超级玛丽"是一个很善于跳跃的探险家,他的拿手好戏是跳跃,但它一次只能向前跳一步或两步。有一次,他要经过一条长为n的羊肠小道,小道中有m个陷阱,这些陷阱都位于整数位置,分别是a1,a2,....am,陷入其中则必死无疑。显然,如果有两个挨着的陷阱,则玛丽是无论如何也跳过不去的。
      现在给出小道的长度n,陷阱的个数及位置。求出玛丽从位置1开始,有多少种跳跃方法能到达胜利的彼岸(到达位置n)。
    输入格式
      第一行为两个整数n,m
      第二行为m个整数,表示陷阱的位置
    输出格式
      一个整数。表示玛丽跳到n的方案数
    样例输入
    4 1
    2
    样例输出
    1
    数据规模和约定
      40>=n>=3,m>=1
      n>m;
      陷阱不会位于1及n上
     
    注释:思路不难,见代码注释。
     1 /*
     2 思路:
     3     设temp处有陷阱,且temp-1米处的方法数为:b[temp-1],则b[temp+1]=b[temp-1],且到temp+2处的方法数也为b[temp-1],即:b[temp+1]=b[temp-1]=b[temp+2].
     4 综上b[i]=b[i-1]+b[i-2];
     5     由题意知b[1]=b[2]=1;
     6     设有陷阱的i米处的方法数为b[i]=0。 
     7 */
     8 #include<stdio.h> 
     9 int main(){
    10     int n,m;
    11     scanf("%d%d",&n,&m);
    12     int b[n], xianjing[m];//b[i]表示到第i米处的方法数
    13     for(int i=0;i<=n;i++){//先将b赋初值
    14         b[i]=1;
    15     }
    16     int flag=0;//标记是否有相邻的陷阱 
    17     for(int i=1;i<=m;i++){
    18         scanf("%d",&xianjing[i]);
    19         b[xianjing[i]] = 0;//有陷阱的位置方法数为0
    20         if(i>1)
    21             if(xianjing[i]-xianjing[i-1]==1 || xianjing[i]-xianjing[i-1]==-1)
    22                 flag=1;
    23     }
    24     if(flag==1)//若有相邻的陷阱,必死无疑 
    25         printf("0");
    26     else{
    27         for(int i=3;i<=n;i++){
    28             if(b[i]==0)
    29                 continue;
    30             else
    31                 b[i]=b[i-1]+b[i-2];
    32         }
    33         printf("%d",b[n]);
    34     }
    35     return 0;
    36 }
  • 相关阅读:
    【博弈论】K倍动态减法游戏
    【博弈论】翻硬币游戏8种模型
    P4124 [CQOI2016]手机号码(数位DP,前导0)
    AtCoder Beginner Contest 146
    Sumitomo Mitsui Trust Bank Programming Contest 2019
    ICPC 2018 Nanjing Regional
    模拟退火基础学习&模板
    AtCoder Beginner Contest 117
    AtCoder Beginner Contest 118
    AtCoder Beginner Contest 119
  • 原文地址:https://www.cnblogs.com/panweiwei/p/6667167.html
Copyright © 2011-2022 走看看