您的位置:首页 > 其它

Problem3-1016

2016-05-21 17:23 274 查看
简单题意:整体来讲,就是在一个二维平面内走格子,规则是:一次只能移动一次,并且不能往回走,同时走过的格子不能再走第二遍,求走n步不同的解决方案!

解题思路:f
表示走n步的方案数,x
表示向下走的方案数,z
表示向左右走的方案数;所以 f
=x
+z
,x
=x[n-1]+z[n-1];z
=x[n-1]*2+z[n-1]

所以f
=2*f[n-1]+x[n-1]===>f
=2*f[n-1]+f[n-2];

代码如下:

#include <iostream>  

using namespace std;  

int main()  

{  

    long long dp[25];  

    dp[1]=3;  

    dp[2]=7;  

    int N,m,flag=2;  

    cin>>N;  

    while(N--)  

    {  

        cin>>m;  

        if(m<=flag)  

            cout<<dp[m]<<endl;  

        else  

        {  

            for(int i=flag+1;i<=m;++i)  

                dp[i]=2*dp[i-1]+dp[i-2];  

            flag=m;  

            cout<<dp[m]<<endl;  

        }  

    }  

    return 0;  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: