hdu2046 骨牌铺方格

题解:

 代码如下:

#include <stdio.h>

__int64 A[51][30], B[51];

int main()
{
	int n, i, j;
	for (i=0; i<=50; i++)
		A[i][0] = 1;
	for (i=2; i<=50; i++)
	{
		for (j=1; j<i/2+1; j++)
			A[i][j] = A[i-2][j-1] + A[i-1][j];
	}
	for (i=1; i<=50; i++)
	{
		for (j=0; j<30; j++)
			B[i] += A[i][j];
	}
	while (scanf("%d", &n) != EOF)
		printf("%I64d\n", B[n]);
	return 0;
}


 

如果仔细观察的话,可以发现递推式:A[i] = A[i-2] + A[i-1];

代码如下:

 

#include <stdio.h>

__int64 A[51] = {0, 1, 2, 3};

int main()
{
	int n, i;
	for (i=3; i<=50; i++)
		A[i] = A[i-2] + A[i-1];
	while (scanf("%d", &n) != EOF)
		printf("%I64d\n", A[n]);
	return 0;
}


 

喝喝,还是这个代码简单、高效,传说中的fibonacci数列。

posted on 2013-01-20 21:41  zm001  阅读(124)  评论(0编辑  收藏  举报