zoukankan      html  css  js  c++  java
  • A child is running up a staircase with N steps, and can hop either 1 step,2steps,3 steps at a time. Count how many possible ways the child can run up

    A child is running up a staircase with N steps, and can hop either 1 step,2steps,3 steps at a time. Count how many possible ways the child can run up the stairs.

     class Upstaircase
        {
            static void Main(string[] args)
            {
                /* Enter your code here. Read input from STDIN. Print output to STDOUT */
    
                //string line1 = System.Console.ReadLine().Trim();
    
                System.Console.WriteLine(Upstaircase.countWaysDP(2,new int[100]));
                System.Console.WriteLine(Upstaircase.countWaysDP(3, new int[100]));
                System.Console.WriteLine(Upstaircase.countWaysDP(4, new int[100]));
                System.Console.WriteLine(Upstaircase.countWaysDP(5, new int[100]));
                System.Console.WriteLine(Upstaircase.countWaysDP(36, new int[100]));
                System.Console.WriteLine(Upstaircase.countWaysDP(38, new int[100]));
                Console.Read();
    
            }
          //O(3^n). exponential
            public static int countWays(int n)
            {
                if (n<0)
                {
                    return 0;
                }
                else if (n==0)
                {
                    return 1;
                }
                else
                {
                    return countWays(n - 1) + countWays(n - 2) + countWays(n - 3);
                }
    
            }
            //DP: dynamic programing.   up to 37 will overflowed.  Using Long type is just delay but not resolve it.
            public static int countWaysDP(int n,int[] map)
            {
                if (n < 0)
                {
                    return 0;
                }
                else if (n == 0)
                {
                    return 1;
                }
                else if (map[n] > 0)
                {
                    return map[n];
                }
                else
                {
                    map[n] = countWaysDP(n - 1, map) + countWaysDP(n - 2,map) + countWaysDP(n - 3,map);
                    return map[n];
                }
    
            }
    

      

  • 相关阅读:
    SDOI 2009 HH的项链
    SDOI2012 longge的问题
    SDOI 2010 星际竞速
    SDOI2009 晨跑
    SDOI2008 仪仗队
    让我们来看一看C++ 三.表达式与运算符
    如何判断素数
    让我们来看一看C++ 一.对世界说你好
    币种校验的安全问题随笔
    Nodejs代码安全审计之YAPI
  • 原文地址:https://www.cnblogs.com/anorthwolf/p/3133400.html
Copyright © 2011-2022 走看看