回 帖 发 新 帖 刷新版面

主题:多米诺骨牌覆盖,跪求代码

[color=FF00FF][color=FF0000][size=4]3*n的区域用2*1的多米诺骨牌覆盖,问有几种不同的方案。0<=n<=30。


   

样例:
输入:d.in
2
输出:d.out
3

输入
8
输出
153

输入
12
输出
2131[/size][/color][/color]   
这周要交,急需代码,希望同时附带结果图像,谢谢!!!!

回复列表 (共1个回复)

沙发

这道题求解用到了组合数学的知识,首先建立递归方程,求解。如何建立求解就省略了(也是一个哥们儿帮我建的,不过并不复杂,和一般组合数学中的多米诺覆盖差不多)
f(n) = 4 * f(n-2) - f(n-4)

然后写个递归程序就完事了

int f(int n)
{
    if (!(n % 2))
    {
        if (2 == n)
            return 3;
        else if (4 == n)
            return 11;
        else if (n > 4)
            return 4*f(n - 2)-f(n-4);
        else
            return 0;
    }
    else
    {
        std::cout<<"Error : n must be a even number!"<<std::endl;
        return 0;
    }
}


测试一下

#inclue<iostream>

int main()
{
    int n;
    std::cout<<"Input the n =";
    std::cin>>n;
    std::cout<<"result : "<<f(n)<<std::endl;
    return 0;
}

ok!!thx to my friend~

我来回复

您尚未登录,请登录后再回复。点此登录或注册