chuyên đề Các bài toán làm quen với quy hoạch động

6 1.5K 83
chuyên đề Các bài toán làm quen với quy hoạch động

Đ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 Trong ngành khoa học máy tính, quy hoạch động phương pháp giảm thời gian chạy thuật toán thể tính chất toán gối (overlapping subproblem) cấu trúc tối ưu (optimal substructure) Nhà toán học Richard Bellman phát minh phương pháp quy hoạch động vào năm 1953 Ngành thành lập chủ đề kỹ nghệ phân tích hệ thống tổ chức IEEE thừa nhận AA MỘT SỐ BÀI TOÁN BẮT ĐẦU Bài toán Fibonaci Dãy Fibonaci định nghĩa sau:  F1 = F2 =   Fn = Fn −1 + Fn−2 (n ≥ 3) Em tìm số Fibonaci thứ n * Ý tưởng – Thuật toán 1: Đệ quy Nhìn vào công thức ta thấy chất đệ quy, việc tính Fn ta viết dễ dàng ngắn gọn: Function Fb(n:longint):int64; Begin If (n=44 thuật toán không khả thi * Ý tưởng cải tiến – Thuật toán 2: Quy hoạch động Để thuật toán ta chạy nhanh ta thấy cần cải tiến để fb(x) cần tính lần Để làm điều ta gọi F[i] số fibonaci thứ i (f mảng chiều) Khi ta thấy việc tính mảng nhanh chóng: Function Fibo(n:longint):int64; Var i:longint; Begin f[1]:=1; f[2]:=1; For i:=1 to n f[i] : = f[i-1] + f[i-2]; Exit(f[n]); End; Trong thuật toán trên: Việc tính số fibonaci lưu lại, số tính lần, tính từ nhỏ đến lớn, Số fibo sau tính thông qua số fibo nhỏ  phần tư tưởng quy hoạch động 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 (chú thích: có thuật toán khác tốt để tính số fibonaci thứ n, nhiên để làm quen với tư tưởng QHĐ ta tạm dừng thuật toán này) Bài toán bò: Nguồn: NTU – Tên bài: Sabo Anh nông dân Bo có đàn bò gồm nhiều đực Trong hội chợ, anh muốn hàng bò gồm n Tuy nhiên bò đực hăng đứng gần nhau, anh phải tối thiểu k bò xen hai bò đực để chúng khỏi húc Bạn giúp anh Bo đếm thử xem có cách để hàng gồm n bò mà hai bò đực không húc (anh Bo có nhiều bò nên không sợ thiếu bò bò đực) Ví dụ với n = k= 1, ta có cách xếp sau (M: bò đực, F: bò cái): FFFF, MFFF, FMFF, FFMF, FFFM, MFMF, MFFM, FMFM Dữ liệu nhập: - Gồm hai số nguyên n k cách khoảng trắng ( ≤ n, k ≤ 1.000) Dữ liệu xuất: - Số cách xếp hàng thỏa mãn yêu cầu Do số lượng lớn nên cần in tối đa chữ số cuối (modulo 1.000.000) Ví dụ Sapbo.inp Sapbo.out Sapbo.in Sapbo.out p 41 52 * ý tưởng đầu tiên: đệ quy quay lui Ta nhận thấy quy về: Có dãy nhị phân có độ dài n cho kí tự cách k kí tự Ta duyệt quay lui tất cách bò (sinh tất dãy nhị phân có độ dài n thỏa mãn điều kiện) ta đếm Nhận xét: n ... B[6] = b[5] + b[3] … B[i] = b[i-1] + b[i-k-1]  Đây thứ ta cần tìm Sau thử ta thấy quy luật sau: • • Với i=1 đến k+1: Với i=k+2 đến n: b[i] = i+1 b[i] = b[i-1] + b[i-k-1] Công thức ta vừa tìm công... so cach sap hang i bo f[1]:=2; {F[1] duoc goi la co so QHD} for i:=2 to k+1 f[i]:=(i+1); for i:=k+2 to n f[i]:=(f[i-1] + f[i-k-1]) mod modu; //Ghi ket qua write(f[n]); Close(input); Close(output);... cho i < j hiệu aj - lớn Dữ liệu vào: gồm dòng - Dòng 1: số nguyên n (2 ≤ n ≤ 105) - Dòng 2: gồm n số nguyên a1, a2, , an (0 ≤ ≤ 109) Dữ liệu xuất: - Là giá trị lớn hiệu aj - Ví dụ hieuso.inp

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

Từ khóa liên quan

Mục lục

  • Ví dụ

  • Sapbo.inp

  • Sapbo.out

  • Sapbo.inp

  • Sapbo.out

  • 4 1

  • 8

  • 5 2

  • 9

    • Input

    • Output

    • Example

    • Latgach1.inp

    • Latgach1.out

    • Latgach1.inp

    • Latgach1.out

    • 3

    • 1

    • 2

    • 3

    • 1

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

Tài liệu liên quan