XÂY DỰNG CÔNG THỨC QUY HOẠCH ĐỘNG BẰNG PHƯƠNG PHÁP PHÂN TÍCH đơn vị dữ LIỆU CUỐI

25 1.3K 3
XÂY DỰNG CÔNG THỨC QUY HOẠCH ĐỘNG BẰNG PHƯƠNG PHÁP PHÂN TÍCH đơn vị dữ LIỆU CUỐI

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

XÂY DỰNG CÔNG THỨC QUY HOẠCH ĐỘNG BẰNG PHƯƠNG PHÁP PHÂN TÍCH ĐƠN VỊ DỮ LIỆU CUỐI THPT chuyên LƯƠNG VĂN TỤY Khái niệm đơn vị liệu cuối Trong lớp lớn toán Tin học, phải đếm cấu hình tổ hợp có thứ tự (x1, x2, ,xn) thỏa mãn tính chất đặc trưng tìm giá trị tối ưu (theo nghĩa đó) cấu hình Chúng ta sử dụng phương pháp quy hoạch động theo cách sau đây: Tìm lời giải bước một: bước thứ k, đếm cấu hình (x 1, x2, ,xk) hay tìm giá trị tối ưu loại cấu hình k phần tử (x1, x2, ,xk) Việc tìm lời giải bước thể nguyên lý “chia để trị” tin học: Thay trực tiếp tìm lời giải toán lớn, ta giải tốn nhỏ mơ hình, sau dựa kết tốn nhỏ để tìm kết tốn lớn Nói cách nơm na, giống việc xây tường phải xây từ móng, sau xây hàng gạch có tường hồn chỉnh, hàng gạch thứ k (tính từ móng trở lên) hình ảnh trực quan đơn vị liệu cuối bước thứ k Đối với cấu hình ta xây dựng đến bước thứ k: (x 1, x2, ,xk) ta nói xk đơn vị liệu cuối bước Việc xác định giá trị xk không khó khăn trước xây dựng (x1, x2, ,xk-1), từ có phương án tính số lượng hay giá trị tối ưu cho bước thứ k Một điểm mấu chốt phân tích quy nạp xây dựng bước thứ k là: Nếu ta coi phần tử cấu hình xây dựng vị trí đường để đến vị trí thứ k ta phải qua vị trí thứ k-1 Nói cách khác, để đến vị trí cuối x k xác định xk-1 phải vị trí “đi đến x k” Từ nhận xét mấu chốt mà việc phân tích cấu trúc x k – đơn vị liệu cuối bước k – để tìm vị trí xk-1 yếu tố định để có lời giải cho tốn Cơ sở toán học: A/ Phương pháp quy nạp: “Nếu mệnh đề toán học P(n) phụ thuộc biến số tự nhiên n với giá trị sở n = a, P(k) kéo theo P(k+1) mệnh đề P(n) với số tự nhiên n không nhỏ a” Điều quan trọng áp dụng dùng phương pháp quy nạp chứng minh tốn mà cách chứng minh P(k+1) – để làm điều này, phương pháp quy nạp người ta vận dụng thật sáng tạo sở có P(n) với n khơng q k Việc hồn tồn tương tự phân tích xây dựng xk theo giá trị có trước cấu hình xây dựng tốn B/ Cơng thức truy hồi: Có hai dạng cơng thức truy hồi sử dụng: 1/ Một dãy số hoàn toàn xác định biết k giá trị công thức xác định số hạng theo k số hạng liền trước nó: {Fn} xác định biết F1, F2, ,Fk công thức Fn = F(Fn-1,Fn-2, ,Fn-k) 2/ Một dãy số hoàn toàn xác định biết giá trị công thức xác định số hạng theo số hạng trước nó: {Fn} xác định biết F1 công thức Fn = F(Fn-1,Fn-2, ,F1) Việc tính giá trị ban đầu F1, F2, , Fk gọi bước sở, việc tìm cơng thức cho phép tính số hạng dãy theo số hạng trước gọi bước quy nạp Các toán áp dụng: Sau xin nêu 20 toán để thấy vận dụng phong phú việc phân tích đơn vị liệu cuối Các toán chọn đề thi kỳ thi học sinh giỏi khu vực, Quốc gia đề thi nhiều nước giới Bài Toán 1: Đếm xâu nhị phân Đề bài: Cho số nguyên dương n Tính số xâu nhị phân độ dài n khơng có chữ số liền Xây dựng giải thuật: Ta liệt kê xâu độ dài n khơng có chữ số liền để đếm Tuy nhiên phương án rõ ràng khơng khả thi, khơng có đủ nhớ khơng có thời gian để làm cơng việc n lớn lúc số lượng xâu cần liệt kê nhiều đến mức “kinh khủng” Từ nhận xét: Một xâu độ dài n thỏa mãn u cầu tốn (khơng có ký tự liên tiếp) xâu n-1 ký tự thỏa mãn điều này, có nghĩa để có xâu độ dài n ta việc thêm vào sau xâu độ dài n-1 đơn vị liệu ký tự đơn vị liệu cuối bước thứ k ký tự thứ k xâu Từ phương pháp phân tích quy nạp, ta xây dựng cơng thức quy hoạch động cho phép tính số xâu độ dài n theo số xâu có độ dài nhỏ thỏa mãn yêu cầu toán Gọi F[k] số xâu nhị phân độ dài k khơng có chữ số liền Bước sở: n = 1: có xâu thoả mãn ‘0’ ‘1’ nên F[1]:=2 n = 2: có xâu thoả mãn ‘00’;’01’và ‘10’ nên F[2]:=3 Bước quy nạp: Giả sử tìm F[i] với i:=1,2…,k-1 Ta tính F[k] – số xâu độ dài k thỏa mãn tốn có do: + Thêm vào sau xâu độ dài k – 1, số xâu loại số xâu độ dài k-1 chữ số liền F[k-1] + Thêm vào sau xâu độ dài k – 1, để tạo xâu độ dài k thoả mãn yêu cầu ký tự cuối xâu độ dài k-1 phải 0, số xâu loại số xâu độ dài k-2 khơng có chữ số liền F[k-2] Vậy F[k] = F[k – 1] + F[k – 2] (1) Do biết F[1], F[2] nên từ cơng thức ta tính F[n] với n tùy ý Chú ý viết chương trình: + F[n] lớn (cỡ hàng nghìn chữ số) n lớn, ta phải xây dựng thực tính tốn số nguyên lớn Bài cần xây dựng phép toán cộng số lớn (dùng xâu mảng chiều) + Từ cơng thức (1) ta thấy để tính F[k] cần số hạng trước nên khơng cần lưu lại mảng F làm cho tốn nhớ Ta dùng ba biến F1, F2, F3 ln phiên tính F3 theo F1, F2 sau cập nhật lại F1=F2, F2=F3 vòng lặp đến tính F[n] Bài Tốn (Mở rộng): Tương tự trên, ta xây dựng cơng thức tính số xâu nhị phân độ dài n khơng có k chữ số liền (k>=2) Ở ta gọi F[n] để giữ giá trị số xâu nhị phân khơng có k chữ số liền có độ dài n Bước sở: Ta thấy F[0]:=1; F[i]:=2i với i:=1,2, k-1 Với i:=k, F[k] = 2k – (trừ xâu có k chữ số 1) Bước quy nạp: + Thêm vào sau xâu độ dài n – 1, số xâu loại số xâu độ dài n-1 khơng có chữ số liền F[n-1] + Thêm vào sau xâu độ dài n – tạo thành F[n-1] xâu nhị phân có độ dài n có số xâu khơng thoả mãn k chữ số liên tiếp cuối Số xâu sau thêm có k chữ số cuối bằng số xâu độ dài n-1 thỏa mãn tốn có k-1 chữ số cuối : x 1x2 xn-k-1xn-k11…1, xn-k = số xâu loại số xâu x 1x2 xn-k-1 thỏa mãn tốn F[n-k-1], từ số xâu độ dài n tận thỏa mãn toán F[n-1] – F[n – k – 1] Vậy Ta có cơng thức quy hoạch động: F[n]:=2*F[n-1]-F[n-k-1] Bài Tốn 3: LÁT VIỀN Tên chương trình: TILE.PAS Đề bài: Đường viền trang trí nhà có kích thước 2xN lát loại gạch: loại kích thước 1x2 loại 2x2 Hãy xác định số cách lát khác thực Dữ liệu: Vào từ file văn TILE.INP, gồm nhiều dòng, dòng chứa số nguyên N (1 < N ≤ 250) Kết quả: Đưa file văn TILE.OUT kết tìm được, số dịng Ví dụ: TILE.INP 12 100 200 TILE.OUT 171 2731 845100400152152934331135470251 107129202950599351702797472822744173501480199585519522353425 Xây dựng giải thuật: Đương nhiên liệt kê tất cách lát đếm số cách lát lớn Tuy nhiên để ý cách lát, vị trí 1x2 cuối đường viền bị phủ viên gạch 1x2 “đứng” , viên gạch 2x2 viên gạch 1x2 đặt “nằm”, “đơn vị liệu cuối” ta cách đặt gạch lát vị trí cuối đường viền Từ lại nghĩ đến chuyện tính số cách lát đường viền độ dài n theo số cách lát đường viền ngắn sau: Gọi F[k] số lát viền kích thước 2*k Bước sở: Ta thấy F[1] = 1; F[2] = Bước quy nạp: + Nếu vị trí cuối viên gạch 1x2 “đứng”: số cách lát số cách lát viền kích thước 2*(k-1) F[k-1] + Nếu vị trí cuối viên gạch 2*2 hay viên gạch 1x2 xếp “nằm”: số cách lát số cách lát viền kích thước 2*(k-2) F[k-2] Vậy F[k] = F[k-1] + 2*F[k-2] Chú ý viết chương trình: + F[n] lớn nên phải thực tính tốn với số lớn + Chỉ cần dùng ba biến tính luân phiên BT1 Bài Tốn 4: NHĨM Tên chương trình: GROUP.PAS Đề bài: Cho đồ thị vô hướng n đỉnh {1, 2, 3, …, n}(1 ≤ n ≤ 76) có dạng sau: Tập đỉnh rời tối đa tập đỉnh thoả mãn điều kiện sau: Khơng có đỉnh tập có đường nối trực tiếp, Khơng thể bổ sung đỉnh vào tập mà đảm bảo điều kiện đầu Ví dụ, với n = ta có tập tối đa {1,3,5},{2,4},{2,5},{1,4} Hai tập rời khác nhau, khác phần tử Yêu cầu: Cho n Hãy xác định số tập rời tối đa xác định Dữ liệu: Vào từ file văn GROUP.INP gồm nhiều tests, test số nguyên, cho dòng Kết quả: Đưa file văn GROUP.OUT, kết số nguyên, đưa dòng GROUP.INP GROUP.OUT 2 4410 Xây dựng giải thuật: Nhận xét rằng: điều kiện thứ tập rời tối đa khơng thể có hai số liên tiếp, điều kiện thứ hai tập rời tối đa hai số liên tiếp cách không đơn vị Như nghĩa tập rời tối đa tăng dần: a1< a2 < a3 1); F[k,6]:=F[k-1,0]+F[k-1,1]+F[k-1,7]; F[k,7]:=F[k-1,6]+F[k-1,2]; F[k,8]:=F[k-1,1]+F[k-1,3]; F[k,9]:=F[k-1,4]+F[k-1,2]; Kết toán tổng tất các F[N,i] với I = 1, 2, …, Bài Tốn 13: NHẢY VỀ ĐÍCH Tên chương trình: JUMP.PAS Đề bài: Xét bảng kích thước n×n vng (4 ≤ n ≤ 100), ô ghi số nguyên phạm vi từ đến Ở góc trái có quân cờ Ta phải chuyển quân cờ ô phải bảng theo quy tắc sau: • Chỉ di chuyển hàng sang phải hay xuống theo cột, • Số ghi có qn cờ kích thước bước nhảy, • Chỉ di chuyển phạm vi bảng xét Với bảng cho trước, khơng có cách nhảy từ trái phải có nhiều cách Ví dụ, với bảng cho hình dưới, ta có cách khác nhảy đích Yêu cầu: Cho n số bảng Hãy xác định số cách nhảy khác đích Dữ liệu: Vào từ file văn JUMP.INP:Dòng chứa số nguyên n, n dòng sau; dịng chứa n số ngun mơ tả dòng bảng theo thứ tự từ xuống Kết quả: Đưa file văn JUMP.OUT số nguyên – số cách nhảy Xây dựng giải thuật: Suy nghĩ đường từ ô (1;1) đến ô (N;N) dãy ô 14 tương tự đường mã tốn trên, có điều quy luật di chuyển qn cờ khác mã Mặc dù ta hoàn tồn sử dụng ý tưởng cách tính số đường mã để tính số đường quân cờ này: Ta tính số cách quân cờ từ ô (1;1) đến ô khác dòng từ đến N từ trái sang phải Khi đơn vị liệu cuối cuối đường Gọi F[i,j] số cách nhảy khác từ ô [1,1] đến ô [i,j] theo quy tắc Kết cuối F[N,N] Các F[i,j] tính từ xuống từ trái sang phải Nhận xét tương tự tốn qn mã để đến [i,j] trước qn cờ phải đứng ô [p,q] thỏa mãn: p = i (cùng hàng) q + a[p,q] = j; q = j ( cột ) p + a[p,q] = i; Khi F[i,j] tổng F[p,q] thỏa mãn hai điều kiện trên: Bước sở: F[1,1] = 1; F[i,j] = i

Ngày đăng: 14/10/2015, 14:42

Từ khóa liên quan

Mục lục

  • Dữ liệu:

  • Dòng đầu tiên chứa số nguyên dương n ( n ≤ 106 ) là số lượng ô của băng số;

  • Dòng thứ hai chứa n số nguyên dương a1, a2, ..., an ( ai ≤ 104, i = 1, 2, ..., n ) ghi trên băng số. Các số liên tiếp trên cùng dòng được ghi cách nhau bởi ít nhất một dấu cách.

  • Kết quả:Một số nguyên duy nhất là số điểm lớn nhất có thể đạt được từ một lượt chơi.

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

Tài liệu liên quan