每天一算法(du熊填数字)百度之星的题,限时没有完成,补上。

来源:互联网 发布:三菱系统手动编程实例 编辑:程序博客网 时间:2024/05/22 20:07

Problem Description

    du熊这几天使劲的往一个n 行n列的矩阵填0和1这两个数字,n为偶数,而且矩阵由里向外分成了n / 2层。比如n = 6时,矩阵的分层如下:

    du熊填数时有一个要求:不能存在两个相邻的1,且位于不同的层(这里的相邻指两格子共用一条线)。

    请你帮du熊计算一下有多少种填法。

Input

    输入包含多组测试数据,每组数据包含一个偶数n (2 <= n <= 500)。

Output

    请计算并输出对2012取余后的结果。

Sample Input

2

4

Sample Output

16

1952

Hint

当n = 4时

1011

0100

0100

0000

是满足要求的

1111

0100

0100

0000

是不满足要求的,因为第一行第二列的1和第二行第二列的1相邻且位于不同的层。

 

 

后来想到的解法,,对n层,,则四个角上的不用考虑,,则将剩余的部分在中间用十字平均分成四部分

如上图中6层的数组,,划分成的左上角为,,则只需要一个一个分别看,,又分为。。,,,

则可以分别看成3个元素的数组,,填充0和1,但1不能相邻,,

5个元素的数组,,填充0和1,但1不能相邻,,

 

同理,,n个元素的数组,,填充0和1,但1不能相邻,,各类共的有,,2,3,5,8,13,种。。满足斐波那契数列,,,,,,,,以此类推,,,即可完成,,晚了,,程序找时间补上。。