MẪU A SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ TRƯỜNG THPT HÀM RỒNG SÁNG KIẾN KINH NGHIỆM SỬ DỤNG PHƯƠNG PHÁP QUY HOẠCH ĐỘNG ĐỂ GIẢI QUYẾT MỘT SỐ BÀI TOÁN DẠNG CỰC TRỊ VỀ XÂU TRONG BỒI DƯỠNG HSG TIN HỌC 11 Ng[.]
SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ TRƯỜNG THPT HÀM RỒNG SÁNG KIẾN KINH NGHIỆM SỬ DỤNG PHƯƠNG PHÁP QUY HOẠCH ĐỘNG ĐỂ GIẢI QUYẾT MỘT SỐ BÀI TOÁN DẠNG CỰC TRỊ VỀ XÂU TRONG BỒI DƯỠNG HSG TIN HỌC 11 Người thực hiện: Lê Xuân Nam Chức vụ: Giáo viên SKKN thuộc lĩnh mực (môn): Tin học THANH HOÁ NĂM 2022 skkn MỤC LỤC MỞ ĐẦU 1.1 Lý chọn đề tài 1.2 Mục đích nghiên cứu 1.3 Đối tượng phạm vi nghiên cứu 1.4 Phương pháp nghiên cứu NỘI DUNG SÁNG KIẾN KINH NGHIỆM 2.1 PHƯƠNG PHÁP QUY HOẠCH ĐỘNG 2.2 THỰC TRẠNG TRƯỚC KHI ÁP DỤNG SÁNG KIẾN KINH NGHIỆM 2.3 MỘT SỐ BÀI TOÁN ÁP DỤNG Bài 1:… .3 Bài 2: Bài 3: Bài 4: 2.4 HIỆU QUẢ CỦA SÁNG KIẾN KINH NGHIỆM ĐỐI VỚI HOẠT ĐỘNG GIÁO DỤC, VỚI BẢN THÂN, ĐỒNG NGHIỆP VÀ NHÀ TRƯỜNG .9 KẾT LUẬN, KIẾN NGHỊ .10 skkn TÊN ĐỀ TÀI: SỬ DỤNG PHƯƠNG PHÁP QUY HOẠCH ĐỘNG ĐỂ GIẢI QUYẾT MỘT SỐ BÀI TOÁN DẠNG CỰC TRỊ VỀ XÂU TRONG BỒI DƯỠNG HSG TIN HỌC 11 MỞ ĐẦU 1.1 Lý chọn đề tài Trong trình dạy bồi dưỡng học sinh lớp 11 thi HSG cấp tỉnh mơn tin học, tơi thấy thường có số toán cần sử dụng kĩ thuật lập trình nâng cao mà chương trình phổ thơng em chưa gặp Đặc biệt toán mang tính cực trị dãy số hay xâu Tuy giải tốn nhiều cách khác thi bị giới hạn thời gian nhớ chương trình việc lựa chọn thuật toán cho hiệu việc thực cần thiết Quy hoạch động phương pháp hữu hiệu để giải tốn cực trị Do vậy, tơi lựa chọn đề tài “Sử dụng phương pháp quy hoạch động để giải số toán cực trị xâu bồi dưỡng học sinh giỏi tin học lớp 11” 1.2 Mục đích nghiên cứu Rèn luyện cho học sinh sử dụng phương pháp sử dụng quy hoạch động đóng góp thêm dạng tập cho công tác bồi dưỡng học sinh giỏi môn Tin học tốt 1.3 Đối tượng phạm vi nghiên cứu - Môn Tin học lớp 11 trường THPT; - Học sinh đội tuyển HSG môn Tin học khối 11 trường THPT Hàm Rồng; 1.4 Phương pháp nghiên cứu - Phân tích, tổng hợp, khảo sát - Đánh giá so sánh kết học sinh; skkn NỘI DUNG SÁNG KIẾN KINH NGHIỆM 2.1 PHƯƠNG PHÁP QUY HOẠCH ĐỘNG Trong chiến lược chia để trị, người ta phân toán cần giải thành toán Các toán lại tiếp tục phân thành toán nhỏ hơn, tiếp tục ta nhận tốn giải dễ dàng Tuy nhiên, trình phân chia vậy, ta gặp nhiều lần toán Tư tưởng phương pháp quy hoạch động sử dụng bảng để lưu giữ lời giải toán giải Khi giải toán cần đến nghiệm toán cỡ nhỏ hơn, ta cần lấy lời giải bảng mà khơng cần phải giải lại Chính mà thuật toán thiết kế quy hoạch động hiệu Khi cần đến quy hoạch động? Khơng có cơng thức cho tốn Tuy nhiên, có số tính chất tốn mà ta nghĩ đến quy hoạch động Dưới hai tính chất bật số chúng: - Bài tốn có tốn gối - Bài tốn có cấu trúc tối ưu Thường tốn có đủ hai tính chất này, dùng quy hoạch động Để giải toán quy hoạch động, cần tiến hành cơng việc sau: - Tìm nghiệm tốn nhỏ nhất; - Tìm cơng thức (hoặc quy tắc) xây dựng nghiệm toán thơng qua nghiệm tốn cỡ nhỏ hơn; - Tạo bảng lưu trữ nghiệm tốn Sau tính nghiệm tốn theo cơng thức tìm lưu vào bảng; - Từ toán giải để tìm nghiệm tốn 2.2 THỰC TRẠNG TRƯỚC KHI ÁP DỤNG SÁNG KIẾN KINH NGHIỆM Trong trình bồi dưỡng học sinh giỏi Tin học 11 có số tập lập trình áp dụng thuật tốn thời gian thực chương trình khơng đảm bảo Đây khó khăn lớn học sinh em chưa làm quen nhiều với tập thiết kế thuật toán quy hoạch động Vì việc tập hợp toán quy hoạch động thành hệ thống tập để học sinh tham khảo cần thiết skkn 2.3 MỘT SỐ BÀI TOÁN ÁP DỤNG Bài 1: Cho xâu X, Y Hãy tìm độ dài lớn xâu chung X Y Biết xâu xâu thu xoá số kí tự xâu Dữ liệu vào: từ file văn Bai1.inp gồm: - Dòng đầu xâu X - Dòng hai xâu Y (Chú ý xâu viết liền không cách, độ dài xâu không 103) Dữ liệu ra: ghi file văn Bai1.out số độ dài xâu chung lớn Ví dụ: Bai1.inp Bai1.out abc1def2ghi3 abcdefghi123 10 a) Phân tích thuật tốn: Ta xây dựng hàm mục tiêu F[i,j] có ý nghĩa độ dài xâu chung dài xâu Xi (xâu gồm i kí tự xâu X) xâu Yj( xâu gồm j kí tự xâu Y) Dễ thấy: + F[0,j] = F[i,0] = + Nếu X[i] = Y[j] F[i,j] = F[i-1,j-1] + + Nếu X[i] ≠ Y[j] F[i,j] = max(F[i-1,j],F[i,j-1]) Kết tốn F[m,n] Trong m, n độ dài xâu X Y Cộng thêm dấu cách vào đầu xâu chạy từ số b) Chương trình tham khảo: #include using namespace std; string x,y; int f[1003][1003], n, m; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); freopen("Bai1.inp","r",stdin); freopen("Bai1.out","w",stdout); cin>>x>>y; m=x.length(); skkn n=y.length(); x=" "+x; y=" "+y; for(int i=0; i