poj2663 Tri Tiling

Tri TilingTime Limit: 1000MSMemory Limit: 65536KTotal Submissions: 5843Accepted: 3128

Description

In how many ways can you tile a 3xn rectangle with 2x1 dominoes? 
Here is a sample tiling of a 3x12 rectangle. 

Input

Input consists of several test cases followed by a line containing -1. Each test case is a line containing an integer 0 <= n <= 30.

Output

For each test case, output one integer number giving the number of possible tilings.

Sample Input

2

8

12

-1

Sample Output

3

153

2131

Source

Waterloo local 2005.09.24

__________________________________________________________

  (参考Matrix67,图片源自Matrix67);

共8个状态,建图如上,进行n+1次矩阵乘法,然后 000—>111为答案。

__________________________________________________________

 1 Program Stone;
 2 
 3 const a:array[1..8,1..8]of longint=((0,0,0,0,0,1,0,0),
 4 
 5                                     (0,0,0,0,1,0,0,0),
 6 
 7                                     (0,0,0,0,0,1,0,1),
 8 
 9                                     (0,0,0,0,0,0,1,0),
10 
11                                     (0,1,0,0,0,1,0,0),
12 
13                                     (1,0,1,0,1,0,0,0),
14 
15                                     (0,0,0,1,0,0,0,0),
16 
17                                     (0,0,1,0,0,0,0,0));
18 
19 type ar=array[1..8,1..8]of longint;
20 
21 var i,j,k,l,n:longint;
22 
23     qu,ti:ar;
24 
25  
26 
27  Procedure time(a,b:ar);
28 
29  var i,j,k:longint;
30 
31   begin
32 
33     fillchar(ti,sizeof(ti),0);
34 
35     for i:=1 to 8 do
36 
37      for j:=1 to 8 do
38 
39       for k:=1 to 8 do
40 
41        inc(ti[i,j],a[i,k]*b[k,j]);
42 
43   end;
44 
45  
46 
47  Procedure quick(k:longint);
48 
49   begin
50 
51    if k=1 then begin qu:=a;exit;end;
52 
53    quick(k div 2);
54 
55    time(qu,qu);
56 
57    if k mod 2<>0 then time(ti,a);
58 
59    qu:=ti;
60 
61   end;
62 
63  
64 
65 Begin
66 
67  assign(input,'input.in');reset(input);
68 
69   readln(n);
70 
71   while n<>-1 do
72 
73    begin
74 
75     quick(n+1);
76 
77     writeln(qu[1,6]);
78 
79     readln(n);
80 
81    end;
82 
83  close(input);
84 
85 end.

 

posted on 2016-03-02 20:10  Yesphet  阅读(324)  评论(0编辑  收藏  举报