Bài tập về Quy Hoạch Động cho Chuyên Tin

13 4K 187
Bài tập về Quy Hoạch Động cho Chuyên Tin

Đ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

Giải toán tin phương pháp QUY HOẠCH ĐỘNG Có thể tóm lược nguyên lý QHĐ Bellman phát biểu sau: Quy hoạch động lớp toán mà định bước thứ i phụ thuộc vào định bước xử lý trước  Nhận dạng toán giải phương pháp quy hoạch động Một toán P muốn giải phương pháp quy hoạch động cần có đặc điểm sau: - Bài toán P thỏa mãn nguyên lý tối ưu Bellman, nghĩa sử dụng lời giải tối ưu toán từ mức thấp để tìm dần lời giải tối ưu cho toán mức cao cuối lời giải tối ưu cho toán P - Bài toán P có toán phủ chồng lên nhau, nghĩa không gian toán “hẹp” không tạo dạng hình  Các bước giải toán phương pháp quy hoạch động Bước 1:Xây dựng hàm mục tiêu Áp dụng nguyên lý tối ưu Bellman ta phân rã toán ban đầu thành toán có cấu trúc cho việc giải toán cấp i phụ thuộc vào kết toán trước Cụ thể hóa bước ta phải xây dựng hàm mục tiêu F(i) nghiệm toán cấp i Bước 2: Xác định toán sở Bài toán sở toán nhỏ mà ta biết kết tính kết dễ dàng Đây sở để tính nghiệm cho toán cấp lớn Bước 3: Xây dựng công thức truy hồi Căn vào ý nghĩa hàm mục tiêu, tìm mối quan hệ giửa toán cấp, ta tiến hành xây dựng công thức tính kết toán cấp i dựa vào kết toán cấp trước Bước 4: Lập bảng phương án Sử dụng công thức truy hồi nghiệm toán sở tính nghiệm tất toán lưu trữ chúng vào bảng phương án Bước 5: Kết luận nghiệm toán Dựa vào bảng phương án nghiệm toán Các bước bước giải cụ thể trừu tượng học sinh Để em bước đầu làm quen ta giải toán đơn giản sau: Bài toán 1: Tìm số Fibonaci thứ N? Bước 1: Hàm mục tiêu F(i) số fibonaci thứ i Bước 2: Các toán sở F(1) = 1; F(2) = Bước 3: Công thức truy hồi: F(i) = F(i-1) + F(i-2) Bước 4: Bảng phương án i F(i) 1 5 13 … … Bước 5: Nghiệm F(N) Bài toán 2: Di chuyển quân tốt Cho một bàn cờ kích thước NxN Các dòng từ xuống dưới, các cột từ trái qua phải được đánh số từ một đến N Ô nằm ở hàng i, cột j gọi là Ô(i, j) Người ta đặt một tốt trắng tại Ô(1,1) và M tốt đen các ô còn lại của bàn cờ cho không có tốt nào nằm cùng một ô Ta có thể di chuyển tốt trắng sang ô bên phải, hoặc xuống dưới ô chứa nó nếu ô đó không chứa tốt đen Bạn hãy tính xem có cách di chuyển tốt trắng đến Ô(N, N) Bước 1: Hàm mục tiêu F(i, j) số cách di chuyển quân tốt trắng đến O(i, j) Bước 2: Các toán sở F(0,j) = ∀j:1 N ; F(i,0) = ∀i:1 N F(1,1) = 0; F(u, v) =0 ∀(u, v) tọa độ quân tốt đen Bước 3: Công thức truy hồi Ta thấy đứng O(i-1, j) O(i, j-1) để đến O(i, j) Do số cách đến O(i, j) số cách đến O(i-1, j) cộng với số cách đến O(i,j-1) Ta được: F(i, j) = F (i-1, j) + F(i, j-1) Bước 4: Bảng phương án T D D D D Minh họa trạng bàn cờ 0 0 0 0 1 1 1 3 0 1 11 11 11 22 Bảng phương án 9 20 42 Bước 5: Nghiệm F(N, N) = 42 Dạng 1: Tìm dãy phần tử dãy dài thỏa mãn điều kiện toán Phương pháp chung + Hàm mục tiêu: F(i) độ dài dãy + Bài toán sở: F(1) = + Công thức truy hồi: F(i) = Max {1, F(j)+1 } với Aj Ai thỏa điều kiện toán + Bảng phương án: Dùng mảng chiều lưu trữ + Nghiệm toán: F(N) Các tập áp dụng: Bài 1: Xếp Tháp Tên chương trình: Tower.Pas Một lần nữa, Bờm lại thể không người học giỏi mà chơi giỏi Ở lớp Bờm, bạn thích chơi xếp tháp cậu thể người vô địch trò chơi thắng nhiều bạn lớp Liệu bạn thắng Bờm? Ở trò chơi này, người chơi cho N hình trụ đứng với nhiều kích thước khác yêu cầu người chơi xếp tòa tháp cao từ hình trụ theo thứ tự từ đến N cho khối phải xếp khít với khối dưới, hay đường kính đáy hình không vượt đường kính đáy hình Một khối trụ dùng không dùng phải theo thứ tự cho Dữ liệu: Cho từ file Tower.Inp Dòng đầu ghi số N (N≤ 1000000) N dòng dòng ghi số Ri Hi bán kính đáy chiều cao hình trụ thứ i Kết quả: Ghi file Tower.Out Một số nguyên chiều cao lớn tòa tháp xếp Ví du: Tower.Inp 4 2 3 Tower.Out 10 Nhận xét: Đây toán tìm dãy không tăng theo Ri có tổng chiều cao lớn Hướng dẫn Gọi F[i] độ cao lớn tòa tháp xếp với khối i đỉnh F[i] = H[i] ∀i:1 N; Công thức truy hồi: Nếu khối i xếp khối j (1≤ j < i) hay R[i] ≤ R[j].Ta được: F[i] = Max{F[j]+H[i]} ∀j:1 i-1 Nghiệm toán: Max{F[i]} ∀i:1 N Bài 2: Dãy số WAVIO: Dãy số Wavio dãy số nguyên thỏa mãn tính chất : phần tử đầu xếp thành dãy tăng dần đến phần tử đỉnh sau giảm dần Ví dụ dãy số dãy Wavio độ dài Cho dãy gồm N số nguyên, dãy Wavio có độ dài lớn trích từ dãy Hướng dẫn: - L1[i] độ dài lớn dãy tăng dần dãy A1, A2, Ai - L2[i] độ dài lớn dãy giảm dần dãy Ai, A2, AN - Công thức truy hồi giống toán dãy tăng - Nghiệm toán: Tìm phần tử j mảng L1, L2 thỏa mãn L1[j]+L2[j] lớn Bài 3: Xâu đối xứng Tên chương trình: Palin.Pas Xâu đối xứng xâu mà đọc từ bên trái sang phải hay ngược lại cho kết Bạn tìm xâu đối xứng dài xâu cho trước Xâu xâu S có cách bỏ số kí tự S Dữ liệu: Palin.Inp gồm dòng ghi xâu S có độ dài không 10000 kí tự Kết quả: Palin.Out gồm số độ dài lớn tìm Ví du: Palin.Inp Palin.Out banana Hướng dẫn Gọi F[i,len] số j lớn cho j ≤ i đoạn xâu kí tự j đến kí tự thứ i có tồn xâu đối xứng có độ dài len Nếu không tìm j F[j, len]=0 F[i, 1] = i ∀i:1 N F[i, 2] Max F[i-1, 2] j với j lớn nhỏ i kí tự thứ j kí tự thứ i xâu ban đầu Công thức truy hồi: - F[i, len] = F[i-1, len] không chọn kí tự i vào xâu đối xứng - F[i, len] = giá tri j lớn nhỏ F[i-1, len-2] kí tự thứ j kí tự thứ i Dạng 2: Tìm dãy phần tử dãy chung dài Phương pháp chung Giả sử cho dãy A1, A2,…, AM; B1, B2,…, BN (Các phần tử dãy số kí tự) Yêu cầu tìm dãy chung dài hai dãy cho +Hàm mục tiêu: F(i, j) độ dài dãy chung dài hai dãy A 1, A2, …, Ai; B1, B2,…, Bj + Các toán sở: F(0, j) = = F(i, 0) ∀i:1 M; ∀j:1 N + Công thức truy hồi: Nếu A[i]=B[j] F(i, j) = F(i-1, j-1) +1 Ngược lại F(I, j) = Max(F(i-1, j), F(i, j-1) + Bảng phương án: Dùng mảng hai chiều để lưu trữ + Nghiệm toán: F(M, N) Các tập áp dụng: Bài 1: Xâu chung dài Cho xâu X,Y Hãy tìm xâu X Y có độ dài lớn Hướng dẫn - Gọi L(i,j) độ dài xâu chung dài xâu X(i) gồm i kí tự phần đầu X (X(i)=X[1 i]) xâu Y(j) gồm j kí tự phần đầu Y (Y(j) =Y[1 j]) - Bài toán sở L(0,j)=L(i,0)=0 - Công thức truy hồi L(i,j) = L(i 1,j 1)+1 X[i] = Y[j] L(i,j) = max(L(i 1,j), L(i,j 1)) X[i]≠Y[j] Bài 2: Dãy chung bội hai dài Tên chương trình: Lcs2x.Pas Dãy C = c1, c2, ck gọi dãy dãy A = a1, a2, , an C nhận cách xóa bớt số phần tử dãy A giữ nguyên thứ tự phần tử lại, nghĩa tìm dãy số ≤ l1 < l2 < … < lk ≤ n cho c1 = a_l1, c2 = a_l2, …, ck = a_lk Ta gọi độ dài dãy số phần tử dãy Cho hai dãy A = a1, a2, …, am B = b1, b2, …, bn Dãy C = c1, c2, …, ck gọi dãy chung bội hai dãy A B C vừa dãy dãy A, vừa dãy dãy B thỏa mãn điều kiện × ci ≤ c(i+1) (i = 1, 2, …, k – 1) Yêu cầu Cho hai dãy A B Hãy tìm độ dài dãy chung bội hai có độ dài lớn hai dãy A B Input (Lcs2x.Inp) Dòng chứa T số lượng liệu Tiếp đến T nhóm dòng, nhóm cho thông tin liệu theo khuôn dạng sau: • Dòng đầu chứa số nguyên dương m n • Dòng thứ hai chứa m số nguyên không âm a1, a2, , am số không vượt 109 • Dòng thứ ba chứa n số nguyên không âm b1, b2, , bn số không vượt 109 • Các số dòng ghi cách dấu cách Giới hạn • 30% số test có m, n [...]... bước nào cần phải nhảy Bài 2: Mua vé Có N người xếp hàng mua vé Ta đánh số họ từ 1 đến N theo thứ tự trong hàng Thời gian phục vụ bán vé cho người thứ i là T[i] Mỗi người cần mua 1 vé nhưng được quy n mua tối đa 2 vé, vì thế một số người có thể nhờ người đứng ngay trước mình mua hộ Người thứ i nhận mua vé cho người thứ i+1 thì thời gian mua vé cho 2 người là R[i], tìm phương án sao cho N người đều có vé... k-1 mua vé (KQ[k-1]=1) Dạng 6: Di chuyển Phương pháp chung Đối với các bài toán có dạng di chuyển thì việc xác định hàm mục tiêu cần căn cứ vào quy luật di chuyển cho phép và cần phải chú ý vào giá trị biên Đây là dạng toán thường gặp tuy nhiên việc xây dựng hàm mục tiêu và công thức truy hồi là khá dễ dàng Các bài tập áp dụng: Bài 1: KHU VUI CHƠI Tên chương trình XYZ.PAS Bản đồ khu vui chơi là một... gian ít nhất để phục vụ vé cho k người từ người 1 đến người k Công thức truy hồi: Ta thấy nếu người k tự mua vé thì thời gian ít nhất phục vụ k người là T[k] +F(k-1), nếu người thứ k nhờ người thứ k-1 mua hộ thì thời gian ít nhất phục vụ k người là R[k-1]+F(k-2) Do đó: F(k) = Min( T[k]+F(k-1); R[k-1]+F(k-2)) Tổ chức dữ liệu: Mảng L[1 N], L[i] lưu trữ thời gian ít nhất phục vụ vé cho i người Sau khi xây... ô chung cạnh bên phải hoặc phía dưới Vào ngày nghỉ, Bờm quy t định tham quan khu vui chơi Trong khu vui chơi có một trò chơi Bờm rất thích đặt tại ô (U, V) và nhất định Bờm phải tham gia trò chơi này Nhưng số tiền có hạn Bờm không biết phải đi theo lộ trình nào để chơi được trò chơi mình thích và ít tốn tiền nhất Bạn hãy giúp Bờm nhé Dữ liệu cho từ file XYZ.INP - Dòng đầu là 4 số M, N, U, V ( 3 ≤ M,... F(i, j) là chi phí ít nhất khi đến Ô(i, j) - Công thức truy hồi: F(i, j) = Min{ F(i, j-1), F(i-1, j)}+A[i] - Do bắt buộc phải qua Ô(U,V) nên kết quả bài toán chính là tổng chi phí thấp nhất đi từ Ô(1,1) đến Ô(u,v) và chi phí thấp nhất đi từ Ô(u,v) đến Ô(m,n) Bài 2: NHẢY Tên chương trình: Jump.Pas Trên trục tọa độ Ox có N vị trí được đánh dấu sẵn, vị trí i có tọa độ X i Xét một trò chơi như sau: Nhiệm...Các hình tròn được cho trong một file văn bản, trong đó dòng thứ i mô tả hình tròn số hiệu i (i = 1, 2, , N) bao gồm 3 số thực: hoành độ tâm, tung độ tâm, độ lớn bán kính (đơn vị đo bằng mét) Lập trình đọc các hình tròn

Ngày đăng: 15/05/2016, 08:58

Từ khóa liên quan

Mục lục

  • Yêu cầu

  • Input (Lcs2x.Inp)

  • Giới hạn

  • Output (Lcs2x.Out)

  • Example

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

Tài liệu liên quan