1. Trang chủ
  2. » Công Nghệ Thông Tin

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

4 2,1K 89

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 4
Dung lượng 98,48 KB

Nội dung

Dãy con chung dài nhất của 2 mảng Xâu con chung: Xóa đi một số kí tự của hai xâu thì hai xâu còn lại của chúng bằng nhau.. Vậy rõ ràng kết quả của bài toán Độ dài xâu con chung dài nhất

Trang 1

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 6

CHUYÊN ĐỀ 6: QUY HOẠCH ĐỘNG

B QUY HOẠCH ĐỘNG VỚI MẢNG 2 CHIỀU

1 Bài toán: Xâu con chung dài nhất ( Dãy con chung dài nhất của 2 mảng)

Xâu con chung: Xóa đi một số kí tự của hai xâu thì hai xâu còn lại của chúng bằng nhau

Ví dụ: a=’CEACEEC’ b=’AECECA’

Xâu con chung: ECEC AEEC Khi áp dụng QHĐ đê giải bài này ta chú ý xây dựng công thức như sau: Gọi L(i,j) là độ dài dãy con chung dài nhất của 2 dãy a1 ai và b1 bj Khi đó ta có:

• Nếu i=0, j=0 thì L[i,j] = 0

• Nếu ai <> bj thì L(i,j) = Max( L[i-1,j] , L[i,j-1] )

• Nếu ai=bj thì L[i,j] = 1 + L[i-1,j-1]

Ở đây ta xây dựng L là mảng 2 chiều để lưu bảng phương án Vậy rõ ràng kết quả của bài toán Độ dài xâu con chung dài nhất là L[m,n] Với m là length(a) và n là length(b)

Đoạn code:

Fillchar(L,sizeof(L),0);

For i:=1 to length(a) do

For j:=1 to length(b) do

If a[i]<>b[j] then L[i,j] := Max(L[i-1,j], L[i,j-1])

else L[i,j] := 1 + L[i-1,j-1]

Để truy vết kết quả xâu con chung ta sẽ truy vết dựa vào mảng L: Đi từ ô L[m,n] về ô L[0,0]

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

Trang 2

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

K

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+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

Vậy sẽ quy về giống bài toán con kiến: Đi từ ô (1,1) xuống đáy

Trang 3

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 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

Hình 2: Bảng C Hình 3: Bảng L

4 Bài toán C k

n

Tính Ck n

Chúng ta đã biết các công thức sau:

Ck n = 1 (Với k=0 hoặc k=n)

Ck n = C k n-1 + C k-1 n-1 (Với 0<k<n) Các em có thể viết chương trình con đệ quy để tính Ck n nhưng hiệu quả không cao vì thời gian thực hiện sẽ rất lớn

Áp dụng QHĐ: Ta xây dựng bảng phương án C để lưu

)

Vậy thì ta có công thức tính bảng C:

• Ban đầu C(i,j) = 0

• C[0,i] = 1

• C[i,j] = C[i,j-1] + C[i-1,j-1]

Kết quả của bài toán sẽ là C[k,n]

5 Bắc cầu (Tương tự bài xâu con chung)

Hai nước Anpha và Beta nằm ở hai bên bờ sông Omega, Anpha nằm ở bờ bắc và có M thành phố được đánh số từ 1 đến m, Beta nằm ở bờ nam và có N thành phố được đánh số từ 1 đến n (theo vị trí từ đông sang tây)

Mỗi thành phố của nước này thường có quan hệ kết nghĩa với một số thành phố của nước kia

Để tăng cường tình hữu nghị, hai nước muốn xây các cây cầu bắc qua sông, mỗi cây cầu sẽ là nhịp cầu nối 2 thành phố kết nghĩa Với yêu cầu là các cây cầu không được cắt nhau và mỗi thành phố chỉ là đầu cầu cho nhiều nhất là một cây cầu, hãy chỉ ra cách bắc cầu được nhiều cầu nhất

Hướng dẫn: Gọi các thành phố của Anpha lần lượt là a1,a2,…am; các thành phố của Beta là b1,b2, bn.

Nếu thành phố ai và bj kết nghĩa với nhau thì coi ai “bằng” bj Để các cây cầu không cắt nhau, nếu ta đã

chọn cặp thành phố (ai,bj) để xây cầu thì cặp tiếp theo phải là cặp

Trang 4

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 (au,bv) sao cho u>i và v>j Như vậy các cặp thành phố được chọn xây cầu có thể coi là một dãy con chung

của hai dãy a và b

Bài toán của chúng ta trở thành bài toán tìm dãy con chung dài nhất, ở đây hai phần tử “bằng” nhau nếu chúng có quan hệ kết nghĩa.

6 Tìm xâu palindrome dài nhất của một xâu

Xâu con của một xâu S đã cho là một xâu gồm các kí tự liên tiếp hoặc không liên tiếp Em hãy lập trình tìm xâu con là xâu Palindrome dài nhất của một xâu S đã cho

NKPalin.inp NKPalin.out

Ý 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

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

TỪ KHÓA LIÊN QUAN

w