Quy hoạch động dùng mảng hai chiều

4 2.1K 89
Quy hoạch động dùng mảng hai chiều

Đang tải... (xem toàn văn)

Thông tin tài liệu

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 CHUYÊN ĐỀ NÂNG CAO CHUYÊN ĐỀ 6: QUY HOẠCH ĐỘNG B QUY HOẠCH ĐỘNG VỚI MẢNG CHIỀU Bài toán: Xâu chung dài ( Dãy chung dài mảng) Xâu chung: Xóa số kí tự hai xâu hai xâu lại chúng Ví dụ: a=’CEACEEC’ b=’AECECA’ Xâu chung: ECEC AEEC Khi áp dụng QHĐ đê giải ta ý xây dựng công thức sau: Gọi L(i,j) độ dài dãy chung dài dãy a1 b1 bj Khi ta có: • • • Nếu i=0, j=0 L[i,j] = Nếu bj L(i,j) = Max( L[i-1,j] , Nếu ai=bj L[i,j] = + L[i-1,j-1] L[i,j-1] ) Ở ta xây dựng L mảng chiều để lưu bảng phương án Vậy rõ ràng kết toán Độ dài xâu chung dài L[m,n] Với m length(a) n length(b) Đoạn code: Fillchar(L,sizeof(L),0); For i:=1 to length(a) For j:=1 to length(b) If a[i]b[j] then L[i,j] := Max(L[i-1,j], L[i,j-1]) else L[i,j] := + L[i-1,j-1] Để truy vết kết xâu chung ta truy vết dựa vào mảng L: Đi từ ô L[m,n] ô L[0,0] Các em tự suy nghĩ thêm trường hợp truy vết: dựa vào bảng L  Lặp lại o Khi L[i-1,j]=L[i,j] giảm i o Khi L[i,j-1]=L[i,j] giảm j o Ghi nhận vị trí kí tự giống a[i] o Giảm i j {giống trường hợp giảm từ bảng}  Cho đến i=0 j=0 Bài tập để test: - SPOJ: Bài BLGEN, Bài QBSRT Bài toán kiến: Có kiến bò kiếm ăn sân trường Sân trường có kích thước MxN chia thành m hàng n cột Giáo viên: Lê Thanh Phú 1|Tra n g 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 ô sân trường có chứa số lượng thức ăn định Chú kiến xuất phát vào ô cột muốn bò hết sang cột n Với bước kiến bò sang ô kề cột bên cạnh K Bạn giúp cho kiến tìm đường từ cột sang cột n cho lượng thức ăn mà ăn đường nhiều Hướng giải quyết: Vì theo yêu cầu bước sang ô cột hình vẽ Vậy ta áp dụng QHĐ vào sau: Ta xây dựng bảng phương án L(i,j) lượng thức ăn mà kiến thu lớn bò đến ô (i,j) Vậy ta có Kết Max cột cuối – Cột n Vậy từ ta có công thức tính bảng L sau: Ban đầu L = Vớ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 ô trước 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 ô L[i,j] đến từ ô phía sau bảng Để truy kết đường đi: Các em dựa vào bảng phương án L (Tự làm) Mở rộng: Một số toán tương tự • Kiến bò từ ô (1,1) đến ô (m,n): Trường hợp kết L[m,n] • Robot bò từ ô 1,1 đến ô m,n nhiên robot di chuyển xuống ô sang phải: o Ban đầu L(i,j)=0 o L[i,j] = C[i,j] + Max (2 ô phía L[i-1,j], ô bên trái L[i,j-1]) Với i,j • Một số toán robot di chuyển tương tự mảng chiều em tư tương tự Link bài: SPOJ – Bài: QBMAX; NTU – bài: GIAN Bài toán Tam giác số Tính tổng lớn đường từ đỉnh xuống đáy tam giác Với bước đi chép sang trái chéo sang phải Nếu nhìn tam giác số theo mảng chiều em dễ nhìn hơn: 4 Vậy quy giống toán kiến: Đi từ ô (1,1) xuống đáy Giáo viên: Lê Thanh Phú 2|Tra n g Phuleethanh@gmail.com Tài liệu bồi dưỡng học sinh giỏi THPT – Môn Tin học L[i,j] = C[i,j] + Max( C[i-1,j-1], C[i-1,j] ) Phần II: Chuyên đề nâng cao Kết tổng lớn Max dòng cuối m Nếu yêu cầu kết cần có thêm đường qua ô (7 5) em try vết dựa vào bảng phương án L Hình 2: Bảng C Hình 3: Bảng L Bài toán Ckn Tính Ckn Chúng ta biết công thức sau: Ck n = (Với k=0 k=n) Ckn = Ckn-1 + Ck-1n-1 (Với 0j Như cặp thành phố chọn xây cầu coi dãy chung hai dãy a b Bài toán trở thành toán tìm dãy chung dài nhất, hai phần tử “bằng” chúng có quan hệ kết nghĩa Tìm xâu palindrome dài xâu Xâu xâu S cho xâu gồm kí tự liên tiếp không liên tiếp Em lập trình tìm xâu xâu Palindrome dài xâu S cho NKPalin.inp Lmevxeyzl NKPalin.out level Ý tưởng giải: Gọi xâu R xâu đảo ngược xâu cho Khi ta có xâu chung xâu S xâu đảo R xâu Palindrome dài Vậy để giải toán ta sử dụng Xâu chung dài xâu S xâu đảo S Link Test: SPOJ – Bài: PalinY Giáo viên: Lê Thanh Phú 4|Tra n g Phuleethanh@gmail.com ... xuất phát từ cột 1} L[i,j] = C[i,j] + Max (của ô trước 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 ô L[i,j] đến từ ô phía sau bảng Để truy kết... xuống đáy Giáo viên: Lê Thanh Phú 2| Tra n g Phuleethanh@gmail.com Tài liệu bồi dưỡng học sinh giỏi THPT – Môn Tin học L[i,j] = C[i,j] + Max( C[i-1,j-1], C[i-1,j] ) Phần II: Chuyên đề nâng cao... try vết dựa vào bảng phương án L Hình 2: Bảng C Hình 3: Bảng L Bài toán Ckn Tính Ckn Chúng ta biết công thức sau: Ck n = (Với k=0 k=n) Ckn = Ckn-1 + Ck-1n-1 (Với 0

Ngày đăng: 15/02/2016, 10:16

Tài liệu cùng người dùng

Tài liệu liên quan