zoukankan      html  css  js  c++  java
  • 踩方格 微软编程之美测试题 百练试题

    Description

    有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设:
    a.    每走一步时,只能从当前方格移动一格,走到某个相邻的方格上;
    b.    走过的格子立即塌陷无法再走第二次;
    c.    只能向北、东、西三个方向走;
    请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法只要有一步不一样,即被认为是不同的方案。

    Input允许在方格上行走的步数n(n <= 20)Output计算出的方案数量Sample Input

    2

    Sample Output

    7


    思路
    设F(n) 为走n步的方案数,则 F(0)=1;F(1)=3;
    F(n) =F(n-1) + 2 * { F(n-2) + F(n-3) + ...+F(2) +F(1) +F(0) + 1 }(n>=2)
    输出F(n)即可;
    其中F(n-1)为向北走一步,然后剩余n-1步的方案数,然后就是假设向东走一步,在向北走一步,剩余n-2步的方案数,依次类推,继续向东,向北,直到剩下最后一步时,向北,走完,此为F(0)=1 ,或者向东,走完,此为最后一步;
    乘以2,由于东西对称的缘故。
    
    
    
    
    View Code
    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int n;
        scanf("%d",&n);
        int *f=(int *)malloc((n+1)*sizeof(int));
        f[0]=1;
        f[1]=3;
        int i=0,j=0;
        for (i=2;i<=n;i++)
        {
            //calc f[i]
            int sum=0;
            for (j=0;j<=i-2;j++)
            {
                sum =sum + f[j];
            }
            f[i] = f[i-1] + 2*(sum +1 );
    
        }
        printf("%d\n",f[n]);
        return 0;
    }
    
    
    


  • 相关阅读:
    257. Binary Tree Paths
    324. Wiggle Sort II
    315. Count of Smaller Numbers After Self
    350. Intersection of Two Arrays II
    295. Find Median from Data Stream
    289. Game of Life
    287. Find the Duplicate Number
    279. Perfect Squares
    384. Shuffle an Array
    E
  • 原文地址:https://www.cnblogs.com/easyFancy/p/3000759.html
Copyright © 2011-2022 走看看