这篇博客是从旧博客 WordPress 迁移过来,内容可能存在转换异常。
题目地址:
http://acm.hdu.edu.cn/showproblem.php?pid=2046
思路:
考虑有2*n个,以最左边考虑,
假设2*n有F[n]个,
当最左边是竖时,则剩余的n-1列有f[n-1]种排列;
当最左边是2个横时,则剩余的n-2列有f[n-2]中排列。
递推的题目再可以做做:
http://www.wutianqi.com/?p=409
代码:
// Author: Tanky Woo
// HDOJ 1465
#include
using namespace std;
__int64 f[52];
int main()
{
f[1] = 1;
f[2] = 2;
f[3] = 3;
for(int i=4; i<=50; ++i)
f[i] = f[i-1]+f[i-2];
int num;
while(scanf("%d", #) != EOF)
printf("%I64d\n", f[num]);
return 0;
}
注意:这里和 HDOJ 1465都用了**int64**,因为int的32位不够,对于其用法大家可以百度学习下。