Professional Documents
Culture Documents
BT Bo Sung CD Nhan Ma Tran
BT Bo Sung CD Nhan Ma Tran
f [i ] 1 1 .... 1 1 f [i 1] f [1]
f [i 1] 1 0 .... 0 0 f [2]
f [i 2]
. f [i 2] = 0 1 .... 0 0 * . f [i 3] =Ti* . f [3]
............ .
. . . . ............ ........
f [i 25] 0 0 0 1 0 f [i 26] f [26]
Trang 32
Tổ Tin học – Trường THPT Chuyên Hoàng Lê Kha Ths. Phạm Trọng Khiêm
1 1 .... 1 1
1 0 .... 0 0
Với T= 0 1 .... 0 0
. . . . .
0 0 0 1 0
Các giá trị từ f[1] tới f[26] ta sẽ tính theo thuật toán trâu, tính kết quả bài toán f[s] theo
cách nhân ma trận, có xử lí số lớn.
Bài toán QTLOVE2 - Hoa hướng dương
Đề bài: https://vn.spoj.com/problems/QTLOVE2/
Thuật toán: Sử dụng quy hoạch động kết hợp nhân ma trận:
Gọi f[i][1] là số cách tô i cánh, trong đó màu của cánh hoa thứ i khác với màu cánh hoa thứ
nhất và màu cánh hoa trước nó, và f[i][2] là số cách tô i cánh hoa, trong đó màu của cánh
hoa thứ i khác màu cánh hoa trước nó và giống màu cánh hoa thứ nhất.
->Cơ sở quy hoạch động: f[i][1]=0, f[i][2]=m.
Công thức quy hoạch động:
f[i][1]=(m-2)*f[i-1][1]+(m-1)*f[i-1][2] (1)
f[i][2]=f[i-1][1]. (2)
Kết quả: f[n][1].
Do N<=1018 nên phải sử dụng nhân ma trận để giải quyết bài toán trong thời gian O(log(n)).
Từ (1) và (2) ta có: f[i][1]=(m-2)*f[i-1][1]+(m-1)*f[i-2][1]
Ta xây dựng ma trận như sau:
f[i][1]=(m-2)*f[i-1][1]+(m-1)*f[i-2][1]
f[i-1][1]=1*f[i-1][1]+0*f[i-2][1]
Trang 33
Tổ Tin học – Trường THPT Chuyên Hoàng Lê Kha Ths. Phạm Trọng Khiêm
Và T(n) = T(n-1) + T(n-2) + T(n-3)
Nên ta có: F[n]=F[n-1]+T[n-1]+T[n-2]+T[n-3]
Ta xây dựng ma trận như sau:
F[n] =1*F[n-1]+1*T[n-1]+1*T[n-2]+1*T[n-3]
T[n] =0*F[n-1]+1*T[n-1]+1*T[n-2]+1*T[n-3]
T[n-1]=0*F[n-1]+1*T[n-1]+0*T[n-2]+0*T[n-3]
T[n-2]=0*F[n-1]+0*T[n-1]+1*T[n-2]+0*T[n-3]
Suy ra:
F [ n] 1 1 1 1 F [n 1] 1 1 1 1
T [ n] 0 1 1 1 T [n 1] 1 1 1
= * , đặt T= 0
T [n 1] 0 1 0 0 T [n 2] 0 1 0 0
T [n 2] 0 0 1 0 T [n 3] 0 0 1 0
F [ n] F [3]
T [ n] T [3]
Nên = T *
n-3 , mà T[1]=1, T[2]=2, T[3]=3, F[3]=6
T [n 1] T [ 2 ]
T [n 2] T [1]
F [ n] 6
T [ n] 3
Do đó = T *
n-3
T [n 1] 2
T [n 2] 1
Cuối cùng ta sẽ tính được F[n].
Bài toán FBRICK – Xếp Hình
Đề bài: https://vn.spoj.com/problems/FBRICK/
Thuật toán: Sử dụng quy hoạch động kết hợp nhân ma trận:
Gọi T[k] là tổng thể tích của k hình lăng trụ từ hình 1 đến hình thứ k.
Ta có T[k]=∑ 𝐴[𝑖]
Vậy ta cần tìm T[n].
Ta có T[n]=T[n-1]+A[n]2=T[n-1]+(2A[2]*A[n-1]-A[n-2])2
=T[n-1]+4*A[2]2*A[n-1]2+A[n-2]2-4A[2]*A[n-1]*A[n-2] (1)
A[n]2=(2A[2]*A[n-1]-A[n-2])2=4*A[2]2*A[n-1]2+A[n-2]2-4A[2]*A[n-1]*A[n-2]
= 0*T[n-1] + 4*A[2]2*A[n-1]2+A[n-2]2-4A[2]*A[n-1]*A[n-2] (2)
A[n-1]2=0*T[n-1] + 1*A[n-1]2 +0*A[n-2]2 + 0*A[n-1]*A[n-2] (3)
Trang 34
Tổ Tin học – Trường THPT Chuyên Hoàng Lê Kha Ths. Phạm Trọng Khiêm
A[n]*A[n-1]= (2A[2]*A[n-1]-A[n-2])*A[n-1]
=2A[2]*A[n-1]2 –A[n-1]*A[n-2]
=0*T[n-1] + 2A[2]*A[n-1]2 +0*A[n-2]2 -1*A[n-1]*A[n-2] (4)
Từ (1), (2), (3) và (4) ta có:
1 4 A[2] 1 4 A[2] T [n 1]
2
T [ n]
A[n]2 0 4 A[2] 2
1 4 A[2] A[n 1] 2
= *
A[n 1]2 0 1 0 0 A[n 2] 2
A[n] * A[n 1] 0 2 A[2] 0 1 A[n 1] * A[n 2]
1 4 A[2]2 1 4 A[2]
0 4 A[2]2 1 4 A[2]
Đặt T=
0 1 0 0
0 2 A[2] 0 1
T [ n] T [ 2] A[2] 1
A[n] 2 2 A[2]2
Ta sẽ có =Tn-2* A[2] = Tn-2* (vì A[1]=1,
A[n 1] 2 A[1]2 1
A[n] * A[n 1] A[2] * A[1] A[2]
T[2]=A[2]+A[1]=A[2]+1)
Cuối cùng ta sẽ tính được T[n].
Bài toán FLIB - Flibonakki
Đề bài: https://www.spoj.com/problems/FLIB/
Thuật toán: Sử dụng quy hoạch động kết hợp nhân ma trận:
(Tham khảo thuật toán tại https://mukeshiiitm.wordpress.com/2011/06/25/spoj-7487-
flibonakki/)
Ta cần biểu diễn mối liên quan giữa phần tử thứ n+1 và n.
Từ g(n) = g(n-1) + f(4n-1) , với n > 0
Ta có g(n+1) = g(n)+f(4n+3)
Mà f(4n+3)=f(4n+2)+f(4n+1)=f(4n+1)+f(4n)+f(4n+1)=2f(4n+1)+f(4n).
Nên g(n+1)=g(n)+ 2f(4n+1)+f(4n).
Ta xây dựng ma trận như sau:
g(n+1) =g(n)+ 2f(4n+1)+f(4n)
f(4n+5)=0g(n) + 5f(4n+1)+3f(4n) (biến đổi theo biểu thức của dãy fibonacci)
f(4n+4)= 0g(n) + 3f(4n+1)+2f(4n) (biến đổi theo biểu thức của dãy fibonacci)
nên ta có:
Trang 35
Tổ Tin học – Trường THPT Chuyên Hoàng Lê Kha Ths. Phạm Trọng Khiêm
g (n 1) 0 2 1 g (n)
f (4n 5) = 0 5 3 * f (4n 1)
f (4n 4) 0 3 2 f (4n)
g (n 1) 0 2 1 g ( n)
Hay f (4 * (n 1) 1) = 0 5 3 * f (4n 1)
g ( n) 0 2 1 g (n 1)
Nên f (4n 1) = 0 5 3 * f (4 * (n 1) 1)
f (4n) 0 3 2 f (4 * (n 1))
0 2 1
Đặt T= 0 5 3
0 3 2
g ( n) g (0) 0
Ta sẽ có f (4n 1) = Tn * f (1) = Tn * 1
f (4n) f (0) 0
Trang 36