• 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];
                }
    
            }
    

      

  • 相关阅读:
    多线程 分配
    fopen:文本和二进制方式打开方式对比【转】
    C优先级列表【转】
    sscanf用法
    heap和stack【转】
    大端小端【转】
    二级指针与二维数组的秘密【二者不等】
    C++中的空类编译器默认隐式声明哪些成员函数【CSDN】
    项目内存泄漏问题及解决方案后续
    浅谈部门前台框架中的几个方法<一>
  • 原文地址:https://www.cnblogs.com/anorthwolf/p/3133400.html
Copyright © 2020-2023  润新知