Professional Documents
Culture Documents
Các em tự suy nghĩ thêm về trường hợp truy vết: dựa vào bảng L
Lặp lại
o Khi nào L[i-1,j]=L[i,j] thì giảm i.
o Khi nào L[i,j-1]=L[i,j] thì giảm j
o Ghi nhận vị trí kí tự giống nhau là a[i]
o Giảm i và j đi 1 {giống như trường hợp giảm từ 4 về 3 như trên bảng}
Cho đến khi i=0 và j=0.
Bài tập để test:
- SPOJ: Bài BLGEN, Bài QBSRT
2. Bài toán con kiến:
Có một chú kiến bò đi kiếm ăn trên sân trường. Sân trường có kích thước MxN và được chia thành m
hàng n cột đều nhau.
Giáo viên: Lê Thanh Phú 1|Trang Phuleethanh@gmail.com
Tài liệu bồi dưỡng học sinh giỏi THPT – Môn Tin học Phần II: Chuyên đề nâng cao
Mỗi ô trên sân trường có chứa một số lượng thức ăn nhất định. Chú kiến có thể xuất phát vào
một ô bất kỳ của cột 1 và muốn bò hết sang cột n. Với mỗi bước đi thì chú kiến chỉ có thể bò sang 1
trong 3 ô kề của cột bên cạnh.
Bạn hãy giúp cho chú kiến tìm một đường đi từ cột 1 sang cột n sao cho lượng thức ăn mà chú ăn
được trên đường đi là nhiều nhất.
Hướng giải quyết: Vì theo yêu cầu thì mỗi bước đi nó có thể sang 3 ô của cột kế tiếp như hình vẽ
trên. Vậy ta áp dụng QHĐ vào đây như sau: Ta xây dựng bảng phương án L(i,j) là lượng thức ăn mà kiến
thu được lớn nhất khi bò đến ô (i,j). Vậy thì ta có Kết quả sẽ là Max của cột cuối cùng – Cột n. Vậy từ đây
ta có công thức tính bảng L như sau:
Ban đầu L = 0 Với mọi i,j (Sử dụng Fillchar)
L[i,1] = C[i,1] {Vì kiến xuất phát từ cột 1}
L[i,j] = C[i,j] + Max (của 3 ô trước nó tức: L[i-i,j-1], L[i,j-1], L[i+1,j-1])
L[i-1,j-1]
L[i,j-1] L[i,j]
L[i+1,j-1]
Hình 1: Để đến được ô L[i,j] nó chỉ có thể đến từ 3 ô phía sau như bảng trên.
Để truy ra kết quả đường đi: Các em dựa vào bảng phương án L này. (Tự làm)
Mở rộng: Một số bài toán tương tự như vậy
Kiến chỉ có thể bò từ ô (1,1) đến ô (m,n): Trường hợp này kết quả là L[m,n]
Robot bò từ ô 1,1 đến ô m,n tuy nhiên robot chỉ có thể di chuyển xuống ô dưới hoặc sang phải:
o Ban đầu L(i,j)=0
o L[i,j] = C[i,j] + Max (2 ô phía trên L[i-1,j], ô bên trái L[i,j-1]) Với mọi i,j
Một số bài toán robot di chuyển hoặc tương tự trên mảng 2 chiều như vậy các em có thể tư duy
tương tự.
Link bài: SPOJ – Bài: QBMAX; NTU – bài: GIAN
3. Bài toán Tam giác số
Tính tổng lớn nhất trên đường đi từ đỉnh xuống đáy của tam giác. Với mỗi bước đi có thể đi chép
sang trái hoặc chéo sang phải.
Nếu nhìn tam giác số trên theo mảng 2 chiều các em sẽ dễ nhìn hơn:
7
3 5
8 1 0
2 7 4 4
4 5 2 6 5
Giáo viên: Lê Thanh Phú 2|Trang Phuleethanh@gmail.com
Tài liệu bồi dưỡng học sinh giỏi THPT – Môn Tin học Phần II: Chuyên đề nâng cao
Vậy sẽ quy về giống bài toán con kiến: Đi từ ô (1,1) xuống đáy.
L[i,j] = C[i,j] + Max( C[i-1,j-1], C[i-1,j] ).
Kết quả tổng lớn nhất sẽ là Max của dòng cuối cùng m.
Nếu yêu cầu kết quả cần có thêm đường đi đã qua những ô nào (7 3 8 7 5) thì các em có thể try
vết dựa vào bảng phương án L.
Ý tưởng giải: Gọi xâu R là xâu đảo ngược của xâu đã cho. Khi đó ta có xâu con chung của xâu S và
xâu đảo R chính là xâu Palindrome dài nhất.
Vậy để giải quyết bài toán này ta có thể sử dụng bài Xâu con chung dài nhất của xâu S và xâu đảo
của S.
Link Test: SPOJ – Bài: PalinY