SỞ GIÁO DỤC VÀ ĐÀO TẠO NGHỆ AN
Đơn vị: Trƣờng THPT Phan Đăng Lƣu
SÁNG KIẾN KINH NGHIỆM
Đề tài:
S DỤNG PHƢƠNG PHÁP QUY HOẠCH ĐỘNG ĐỂ
GII MT S BÀI TOÁN CÓ TÍNH TRUY HI TRONG
NGÔN NG LP TRÌNH C++
Môn/Lĩnh vực: Tin học
Ngƣời thực hiện: Nguyễn Thị Thƣơng
Hồ Văn Chiến
Tổ: Toán - Tin
Điện thoại: 0976607114 - 0979783682
Có đính kèm:
Mô hình Phần mềm Phim ảnh Hiện vật khác
Năm học: 2021 - 2022
MỤC LỤC
Phần I. ĐẶT VẤN ĐỀ ............................................................................................... 1
1. Lý do chọn đề tài .................................................................................................. 1
2. Mục tiêu, nhiệm vụ của đề tài ............................................................................... 1
3. Đối tƣợng nghiên cứu ........................................................................................... 1
4. Phƣơng pháp nghiên cứu ..................................................................................... 2
Phần II. NI DUNG NGHIÊN CU ...................................................................... 2
1.Cơ sở lý luận .......................................................................................................... 2
2. Thực trạng vấn đề nghiên cứu .............................................................................. 2
3. Nội dung vấn đề nghiên cứu ................................................................................. 3
3.1. Tên chủ đề ...................................................................................................... 3
3.2. Cơ sở lý thuyết ................................................................................................ 3
3.2.1. Khái niệm về phƣơng pháp quy hoạch động ............................................. 3
3.2.2. Các bƣớc giải bài toán quy hoạch động .................................................... 3
3.2.3. Biện pháp lựa chọn và cài đặt chƣơng trình. ............................................. 4
3.3. Các bài tập áp dụng ......................................................................................... 7
3.3.1. Dạng bài toán về dãy con liên tiếp ........................................................... 7
3.3.2. Dạng bài toán về dãy con không liên tiếp ................................................. 10
3.3.3. Dạng bài toán Dãy con có tổng bằng S. .................................................... 18
3.3.4. Dạng bài toán Biến đổi xâu ....................................................................... 22
3.3.5. Dạng bài toán Ghép cặp ............................................................................ 30
Phần III. KẾT LUẬN VÀ KIẾN NGHỊ .................................................................. 36
3.1. Kết luận ........................................................................................................... 36
3.2. Kiến nghị ......................................................................................................... 36
TÀI LIỆU THAM KHẢO ........................................................................................ 37
1
Phần I. ĐẶT VẤN ĐỀ:
1. Lý do chọn đề tài:
Chúng ta thy Tin Học đƣợc ng dng vào hu hết tt c các lĩnh vực ca cuc
sống và đã đóng vai trò rất ln trong s phát trin ca xã hi.
Thấy đƣợc tm quan trng ca Tin hc, thế gii nói chung Vit Nam nói
riêng đã những đầu lớn cho lĩnh vực này. Đặc bit trong giáo dc nâng cao
dân trí v Tin Học và đào tạo ngun nhân lc có chất lƣợng cao.
Ph huynh và các thế h học sinh sau này cũng đã bắt đu chú trọng và đã chn
các nghành ngh liên quan đến công ngh thông tin nhiều hơn.
Tuy nhiên trong h thng giáo dc nƣớc ta hin nay môn Tin học chƣa đƣợc
quan tâm đúng với tm quan trng ca nó. Tin Học đang bị xem môn ph trong
trƣờng hc dẫn đến học sinh ít đầu cho môn học này, gây ra không ít khó khăn
cho giáo viên trong nhà trƣờng đặc bit chọn đội ngũ học sinh gii. Mt khác
môn Tin học đặc thù riêng, hc sinh giỏi đi thi chủ yếu chm bài t động trên
phn mm themis nên ph thuc ln vào thi gian thc hin (thi gian chy)
chƣơng trình và giới hạn độ ln d liu mà bài toán yêu cu. Vì vy lp trình ngoài
việc chú ý đến gii hn d liu bài toán thì cn la chn thut toán ti ƣu để đm
bo yêu cầu bài toán đặt ra. Vì vậy để gii bài toán trong Tin Học thƣờng phi xác
định đƣợc:
- Bài toán thuc lp nào.
- S dụng phƣơng pháp tối ƣu nào đ gii nó.
Trong quá trình nghiên cu và bồi dƣỡng hc sinh gii chúng tôi gp khá nhiu
bài toán v dãy con bài toán x xâu. Đây một ni dung khá ph biến trong
các đề thi hc sinh gii mt ni dung khá khó. Vi mong mun tìm ra các
gii pháp tối ƣu cho các bài toán này, chúng tôi mạnh dn trình bày sáng kiến kinh
nghim: S DỤNG PHƢƠNG PHÁP QUY HOẠCH ĐỘNG ĐỂ GII MT
S BÀI TOÁN TÍNH TRUY HI TRONG NGÔN NG LP TRÌNH
C++
2. Mc tiêu, nhim v ca đề tài:
Nhm giúp hc sinh đứng trƣớc 1 bài toán, xác định đƣợc bài toán đó thể
áp dụng đƣợc quy hoạch động không cách gii c th nhƣ thế nào, đánh giá, so
sánh đƣợc thi gian thc hiện chƣơng trình phc tp ca thut toán). Cách
nhn din lp công thc quy hoạch đng
3. Đối tƣợng nghiên cu:
S dụng phƣơng pháp quy hoạch động để gii mt s bài toán tính truy hi
trong C++ nhƣ: Tìm dãy con; đếm dãy con; Tính tng dãy con; và các bài toán liên
quan đến xâu nhƣ tìm xâu con chung dài nht và biến đổi xâu.
2
4. Phƣơng pháp nghiên cứu:
Để trình bày sáng kiến kinh nghim này chúng tôi s dng kết hp nhiu
phƣơng pháp nhƣ: Nghiên cu tài liu, nghiên cứu theo chuyên đ, thc nghim,
so sánh, phân tích kết qu thc nghim, ý kiến đóng góp của đồng nghip trong
thc tin ging dy
Phn II. NI DUNG NGHIÊN CU:
1. Cơ sở lý lun:
S phát triển nhƣ vũ bão của Tin hc những đóng góp lớn ca Tin hc trong
s phát trin hi không th ph nhận đƣợc, đc bit trong dp dch Covid 19 vai
trò ca Tin hc đã đƣợc khẳng định, mọi ngƣời dân nói chung ph huynh hc
sinh nói riêng đã nhìn thấy đƣợc vai trò quan trng ca Tin hc trong mọi lĩnh vực
kinh tế, văn hóa giáo dc. Chc chn mọi ngƣời đã cái nhìn nhận khác
thy môn Tin Hc rt quan trng.
hi phát triển, đòi hỏi Tin học cũng phát triển để đáp ng nhu cu ca
hi. Để đáp ứng những đòi hỏi của sự phát triển đó phải kế hoạch đào tạo bồi
dƣỡng những nhân niềm say năng khiếu trong lĩnh vực tin học và
trang bị vốn kiến thức svững chắc, giúp cho mục tiêu đi trƣớc đón đầu, rút
ngắn khoảng cách về trình độ tin học giữa nƣớc ta và thế giới.
Trong quá trình nghiên cứu, giảng dạy, chúng ta gặp rất nhiều các bài tập toán
tin. Các bài tập dạng này rất phong phú và đa dạng. Thực tế chƣa thuật toán
hoàn chỉnh thể áp dụng cho mọi bài toán. Tuy nhiên ngƣời ta đã tìm ra một số
thuật toán chung nhƣ: tham lam, quay lui, quy hoạch động, các giải thuật trên đồ
thị... Các thuật toán này thể áp dụng để giải một lớp khá rộng các bài toán hay
gặp trong thực tế. Trong quá trình ôn thi học sinh giỏi của trƣờng, việc truyền đạt
các kiến thức về một số thuật toán nhƣ: quay lui, quy hoạch động, tham lam, các
giải thuật trên đồ thị… là rất cần thiết cho học sinh để phát triển tƣ duy và lập trình
giải các bài toán tin học. Tạo lập và củng cố lòng say mê tìm hiểu và khám phá cho
học sinh khi giải các bài toán tin.
Trong quá trình dy bồi dƣỡng chúng tôi nhn thấy, nếu học sinh thực hiện tốt
việc lựa chọn cài đặt chƣơng trình tối ƣu khi giải các bài tập về dãy con các
bài tp x lí xâu nói riêng và các bài tập lập trình nói chung thì chất lƣợng hc sinh
gii s đƣc nâng cao.
2. Thc trng vn đề nghiên cu:
Thc trng dy hc môn Tin học trong trƣờng ph thông Phan Đăng Lƣu hiện
nay:
Hiện nay nhu cầu hội đang cần rất nhiều Công Nghệ Thông tin lao
động trình đcao. Tuy nhiên việc đào bồi dƣơng học sinh yêu thích môn tin
học ở các trƣờng phổ thông gặp rất nhiều khó khăn.
3
- Môn Tin hc vẫn đang bị xem môn “phụ”, không tham gia thi tt nghip
hay đại học cao đẳng thế môn Tin Học chƣa nhận đƣợc s quan tâm ca nhà
trƣờng cũng nhƣ phụ huynh và hc sinh.
Mt khác, để lập trình đòi hỏi hc sinh phi có mt kiến thức cơ bản tt, phi có
kh năng về tƣ duy và đam mê.
Vì vậy động viên và tuyển chọn đƣợc các em vào đội tuyển học sinh giỏi môn
tin học ở trƣờng rất k
Trong thc trạng đó chúng tôi muốn tìm hiu, nghiên cu, truyn nhng
kinh nghim, hiu biết của mình để truyn lại đam cho nhng hc sinh ham
thích môn Tin hc.
3. Nội dung vấn đề nghiên cứu:
3.1. Tên ch đề:
S DỤNG PHƢƠNG PHÁP QUY HOẠCH ĐỘNG Đ GII MT S BÀI
TOÁN CÓ TÍNH TRUY HI TRONG NGÔN NG LP TRÌNH C++
3.2. Cơ sở lý thuyết:
3.2.1. Khái niệm về phương pháp quy hoạch động:
Các thuật toán đệ quy có ƣu điểm d cài đặt, tuy nhiên do bn cht ca quá trình
đệ quy, các chƣơng trình này thƣng kéo theo những đòi hỏi ln v không gian b
nh và mt khối lƣợng tính toán khng l, nên mt thut toán hiu qu cc k
cn thiết. Và trong những trƣờng hợp nhƣ vy, quy hoạch động là mt trong nhng
thuật toán đƣợc la chn nhiu nht.
Quy hoạch đng (Dynamic programming) mt k thut nhằm đơn giản hóa
vic tính toán các công thc truy hi bằng ch lưu trữ toàn b hay mt phn kết
qu tính toán ti mỗi bước vi mục đích sử dng li. Bn cht ca quy hoạch động
thay thế hình tính toán “từ trên xuống” (Top-down) bng hình tính toán
“t ới lên” (Bottom-up).
T programming” đây không liên quan gì ti vic lp trình cho y tính, đó
mt thut ng các nhà toán học hay ng để ch ra các bƣớc chung trong
vic gii quyết mt dng bài toán hay mt lp các vấn đề. Không có mt thut toán
tổng quát để gii tt c các bài toán quy hoạch động.
Mục đích ca phn này là cung cp mt cách tiếp cn mi trong vic gii quyết
các bài toán ti ƣu mang bn chất đ quy, đng thời đƣa ra các ví d t d đến khó
để hc sinh th làm quen hình thành các k năng trong vic tiếp cn các bài
toán quy hoạch động.
3.2.2. Các bước giải bài toán quy hoạch động:
Có 4 bƣớc để giải 1 bài toán bằng quy hoạch động:
Bước 1: Xây dựng hàm mục tiêu: