HDOJ 2046 骨牌铺方格

题目地址:

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

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 // Author: Tanky Woo
// HDOJ 1465
 
#include <iostream>
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", &num) != EOF)
		printf("%I64d\n", f[num]);
	return 0;
}

注意:这里和 HDOJ 1465都用了__int64,因为int的32位不够,对于其用法大家可以百度学习下。

发布者

Tanky Woo

Tanky Woo,[个人主页:https://tankywoo.com] / [新博客:https://blog.tankywoo.com]

发表评论

电子邮件地址不会被公开。 必填项已用*标注