主题:多米诺骨牌覆盖,跪求代码
吞噬天地
[专家分:0] 发布于 2007-06-25 07:48:00
[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个回复)
沙发
我爱吹牛 [专家分:60] 发布于 2007-06-26 21:05:00
这道题求解用到了组合数学的知识,首先建立递归方程,求解。如何建立求解就省略了(也是一个哥们儿帮我建的,不过并不复杂,和一般组合数学中的多米诺覆盖差不多)
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~
我来回复