Professional Documents
Culture Documents
LÝ THUYẾT TỔ HỢP
I. SƠ LƯỢC VỀ TỔ HỢP
1. Khái niệm
Tổ hợp như là một lĩnh vực của toán học rời rạc, xuất hiện vào đầu thế kỉ 17.
Lý thuyết tổ hợp được áp dụng trong nhiều lĩnh vực khác nhau: lý thuyết số, hình
học hữu hạn, biểu diễn nhóm, đại số không giao hoán, thống kê xác xuất, …
Lý thuyết tổ hợp gắn liền với việc nghiên cứu sự phân bố các phần tử vào các tập
hợp. Các phần tử là hữu hạn và việc phân bố chúng phải thỏa mãn những điều kiện
nào đó tùy theo yêu cầu của công việc (bài toán).
Mỗi cách phân bố như thế được gọi là một cấu hình tổ hợp (một bộ các phần tử
nào đó).
1. Nguyên lí cộng
Ví dụ 1: Có 8 quyển sách và 6 quyển vở khác nhau. Hỏi có bao nhiêu cách chọn
1 quyển trong các quyển trên?
* Hd:
Có 8 cách chọn ra 1 quyển sách
Có 6 cách chọn ra 1 quyển vở
Với mỗi cách chọn 1 quyển sách không trùng với cách chọn bất kì một quyển vở
nào và ngược lại với mỗi cách chọn 1 quyển vở không trùng với cách chọn bất kì một
quyển sách nào
=>có 8 + 6 = 14 cách chọn 1 quyển trong số các quyển sách và vở đã cho
* Đơn giản
Giả sử có m cách chọn đối tượng x, có n cách chọn đối tượng y và mỗi cách
chọn đối tượng x không trùng với bất kỳ cách chọn đối tượng y nào và ngược lại mỗi
cách chọn đối tượng y không trùng với bất kỳ cách chọn đối tượng x nào thì sẽ có
m+n cách chọn 1 trong các đối tượng đã cho
2. Nguyên lí nhân
Ví dụ 5: Để đi từ TP A đến TP B có 3 cách chọn phương tiện đi lại (ôtô, tàu hỏa,
máy bay), để đi từ TP B đến TP C có 4 cách chọn phương tiện đi lại (ôtô, tàu hỏa, tàu
thủy, máy bay). Hỏi có bao nhiêu cách chọn bộ phương tiện để đi từ TP A đến TP C
phải đi qua TP B?
3. Nguyên lí bù trừ
Nếu một nhiệm vụ có 2 công việc, 2 công việc có thể thực hiện đồng thời
Thì số cách thực hiện nhiệm vụ gồm 2 công việc đó bằng tổng số cách làm mỗi
công việc trừ đi số cách làm đồng thời cả 2 công việc.
Ví dụ 13: |A| = m và |B| = n
|A+B| = m + n - |A B|
Ví dụ 14: Có bao nhiêu xâu nhị phân độ dài 8 thỏa mãn có bít đầu bằng 1 hoặc
có 2 bít cuối là 00?
* Hd ví dụ 14:
+ Xâu nhị phân độ dài 8 có bít đầu bằng 1 là 1 bộ có dạng: 1x 2x3x4x5x6x7x8, với
xi=(0,1) ==> có 27 = 128 xâu thỏa mãn
+ Xâu nhị phân độ dài 8 có bít kết thúc bằng 00 là 1 bộ có dạng: x 1x2x3x4x5x600
=> có 26 = 62 xâu thỏa mãn
+ Xâu nhị phân độ dài 8 có bít vừa bắt đầu bằng 1, vừa kết thúc bằng 00 là 1 bộ
có dạng: 1x2x3x4x5x600, ==> có 25 = 32 xâu thỏa mãn
Vậy số xâu thỏa mãn đề bài là 128 + 64 – 32 = 160.
* Trường hợp đơn giản: Cho 2 tập hợp A và B (chưa biết có rời nhau hay
không).
Khi đó: N(A B) = N(A) + N(B) - N(A B)
* Trường hợp tổng quát: Cho m tập hữu hạn A1, A2, ..,Am. Khi đó:
N(A1A2A3...Am) = N1-N2+N3-....+(-1)m-1Nm
Trong đó Nk là tổng phần tử của tất cả các giao của k_tập (tập con k phần tử) lấy
từ m-tập đã cho, với k=2,3,4, ..., m-1
Đặc biệt:
N1 = N(A1) + N(A2) + ...+ N(Am)
Nm = N(A1A2 ...Am)
4. Nguyên lí Dirichlê
“Cần nhốt 6 thỏ vào 5 lồng thì ắt phải có 1 lồng chứa ít nhất 2 thỏ”
* TQ: “Có n đồ vật được đặt vào k hộp, ắt phải có ít nhất 1 hộp chứa ít nhất [n /
k] đồ vật”
Ví dụ 15: Có 100 người. Hãy tìm xem có ít nhất bao nhiêu người có cùng tháng
sinh?
TL: [100/12] = 9
Ví dụ 16: Trong số 367 người, có bao nhiêu người có cùng ngày sinh?
Tl: 1
1. Hoán vị
a. Định nghĩa: Một hoán vị của n phần tử (n >= 1) là một cách sắp thứ tự n
phần tử đó.
Ví dụ1: Cho n=3 và các phần tử là {1,2,3} thì các hoán vị của 3 phần tử trên là:
(1,2,3), (1,3,2), (2,1,3), (2,3,1), (3,1,2), (3,2,1)
Ví dụ 2: Có 5 người xếp hàng, có chiều cao bằng nhau. Hỏi có bao nhiêu cách
xếp 5 người đó thành hàng?
*Tổng quát: Cho tập hợp A có n phần tử a 1, a2, …,an. Một hoán vị của n phần tử
của tập hợp A là một bộ có n thành phần (x 1, x2, …,xn), xi A và xi <>xj
i,j=1,2,..,n, i<> j
a. Định nghĩa: Một chỉnh hợp lặp chập k của n phần tử là một bộ có thứ tự
gồm k thành phần lấy từ n phần tử đã cho, các thành phần có thể được lặp lại.
(n>1, k>0)
Ví dụ 3: n=3, A = {1,2,3}. => các chỉnh hợp lặp chập 2 của 3 phần tử trên: (1,1),
(1,2), (1,3), (2,1), (2,2), (2,3), (3,1), (3,2), (3,3)
*Tổng quát: Cho tập hợp A có n phần tử a1, a2…,an.
Một chỉnh hợp lặp chập k của n phần tử của tập hợp A là một bộ gồm k thành
phần (x1, x2, …,xk), xi A, i=1,2,..,k
Ví dụ 8: Có n đội bóng thi đấu vòng tròn sao cho cứ 2 đội bất kì gặp nhau đúng
một trận. Hỏi phải tổ chức bao nhiêu trận đấu?
* Hd ví dụ 8:
Cứ 2 đội thì có 1 trận đấu. Suy ra số trận đấu bằng số cách chọn 2 đội từ n đội,
bằng =
2. Bài toán 2: Liệt kê các tập con m phần tử của tập n phần tử.
Bài toán có thể phát biểu như sau: Cho tập hợp Cho X = {1, 2, 3, .. , n}. Hãy liệt
kê các tập con có m phần tử của X. Ví dụ: X= {1, 2, 3, 4, 5}, m= 3. Các tập con 3
phần tử của X là:
1. {1, 2, 3} 2. {1, 2, 4} 3. {1, 2, 5} 4. {1, 3, 4} 5. {1, 3, 5}
6. {1, 4, 5} 7. {2, 3, 4} 8. {2, 3, 5} 9. {2, 4, 5} 10. {3, 4, 5}
Phân tích bài toán:
1. (1, 2, 3) 4. (2, 3, 1)
2. (1, 3, 2) 5. (3, 1, 2)
3. (2, 1, 3) 6. (3, 2, 1)
Phân tích bài toán:
Ta thấy ngay theo thứ tự trên thì cầu hình đầu tiên là: (1, 2, 3, . . n) và cấu hình
cuối cùng là (n, n-1, ..., 2, 1).
Cần xây dựng thuật toán để từ cấu hình đang có là (a 1, a2, …, an) ta tìm được cấu
hình tiếp theo. Từ cấu hình đang có {a1, a2, …, an} ta xây dựng cấu hình tiếp theo
bằng qui tắc:
– Tìm j đầu tiên thoả mãn aj<aj+1 (j giảm từ n, n-1, …, 1);
– Tìm ak là số nhỏ nhất và ak>aj trong các số aj+1, aj+2, …, an;
– Đỗi chỗ aj với ak;
– Đảo ngược đoạn từ aj+1 đến an.
Ví dụ với n = 6, cấu hình đang có là (3, 6, 2, 5, 4, 1)
+ Ta tìm được j = 3
+ Ta tìm được k = 5
+ Hoán vị a3 với a6 ta được (3, 6, 4, 5, 2, 1)
+ Đảo ngược đoạn a4, a5, a6 ta được (3, 6, 4, 1, 2, 5)
Cấu hình tiếp theo là (3, 6, 4, 1, 2, 5)
Chương trình của bài toán là:
Program hoan_vi;
Var a:array[1..100] of integer;
n,i: integer;
count: longint;
stop : Boolean;
Procedure init;
var i: integer;
Begin
4. Bài toán 4: Phân tích số nguyên dương N thành tổng các số nguyên không âm.
Bài toán được phát biểu như sau: Cho một số nguyên dương N. Hãy liệt kê các
cách phân tích N thành tổng các số nguyên không âm. Ví dụ với N = 4, ta có thể phân
tích thành:
1. 4
2. 3 + 1
3. 2 + 2
4. 2 + 1 + 1
5. 1 + 1 + 1 + 1
Phân tích bài toán:
Ta có thể thấy ngay cấu hình đầu tiên là: N và cấu hình cuối cùng là 1 1 1 … 1
(N chữ số 1).
Cần xây dựng thuật toán để từ cấu hình ta tìm được cấu hình tiếp theo. Từ cấu
hình a1, a2, …, ak ta có thể xây dựng cấu hình tiếp theo với quy tắc sau:
- Tìm i đầu tiên sao cho ai 1 (i giảm từ k, k-1, … 1)
- Thay ai = ai -1
- Phân tích (k-i+1) thành các số như sư:
+ Gán aj :=ai với j từ i+1 đến i + [(i+ k-i+1) div ai ];
+ Gán aj+1 := [(k-i+1) mod ai] nếu [(k-i+1) mod ai] 0
(Số phần tử được phân tích thành bây giờ là i + [(k-i+1) div ai] + [(k-i+1) mod ai]
Ví dụ: Với N=10
*Từ cấu hình 4 4 1 1 (k=4)
- Ta tìm được i = 2
Hình H1.
Gọi D là tập hợp các phần tử từ 1 đến n (n=3), trong tập hợp D=(1,2,3) lần lượt
lấy các giá trị X(x1, x2, x3) để được một hoán vị.
Ví dụ: HV(1,2,3); HV(2,3,1); HV(1,3,2)...
Ban đầu trong D, các giá trị 1, 2 và 3 đều sẵn sàng.
– Bước 1, D(1,2,3) ta chọn x1=1, đánh dấu đã chọn 1 trong còn D(2,3).
– Bước 2, D(2,3) chọn x2=2, đánh dấu đã chọn 2 hay D(3).
– Bước 3, D(3) chọn x3=3, đánh dấu đã chọn 3 hay D().
Xét thấy dãy X thoả mãn là một hoán vị X=123 (chọn đủ n=3 giá trị x 1, x2 và
x3), ghi nhận hoán vị này. Tiếp tục tìm kiếm cách thay thế giá trị của các x i
(i=1..3) để được hoán vị khác.
Thông thường và để tránh trường hợp bỏ xót nghiệm ta thường bắt đầu xét lại
theo quy luật nào đó. Trong bài toán này, ta bắt đầu từ x 3 tr ở về trước. Chọn giá
trị khác 3 trong D cho x3, giải phóng phóng 3. Xét thấy trong D không còn giá trị
nào thoả mãn. Vậy ta phải xem xét lại từ x2 (tại Bước 2).
H1-1
Một lời giả của bài toán khi n=4. Hình H1-1.
Ta nhận thấy rằng mỗi quân hậu sẽ được đặt trên một hàng, nên ta gọi quân hậu
đặt ở hàng 1 là hậu 1, quân hậu đặt ở hàng 2 gọi là hậu 2… quân hậu ở hàng n gọi là
quân hậu n. Vấn đề là tìm xem hậu i được đặt tại cột j nào (j=1..n) sao cho không hậu
nào ăn được hậu nào.
* Hd:
– Đặt tất cả các hậu tại đầu mỗi hàng như hình H1-2, sau đó lần lượt đặt các quân
hậu từ 1 đến n vào các cột tương ứng từ 1 đến n sao cho không hậu nào ăn được nhau.
H1-3
– Do vậy ta phải đặt lại hậu 2.
dấu “chấm đậm”
thể hiện vị trí đã
được thử đặt
trước đó
H1-4
– Đặt hậu 2 vào ô 24, hậu 3 vào ô 32, -> không có cách đặt hậu 4, đi theo hướng
này không có lời giải. Nên ta chọn lại cách đặt hậu 3, từ hình H1-4 thấy rằng không
còn cách đặt khác cho hậu 3, nên ta quay lại và thử đạt lại hậu 2 một lần nữa, từ hình
H1-4 thấy rằng không còn cách đặt hậu 2. Ta tiếp tục quay lại tìm cách đặt lại hậu 1.
Còn với cách đặt hậu 1 tại ô 11 thì sẽ không tìm thấy lời giải. Bây giờ ta đặt hậu 1
sang ô 22 và tiếp tục với các hậu khác ta có kết quả như sau:
H1-5
– Từ bàn cờ cuối trong hình H1-5 ta thấy đây là một lời giải của bài toán, ghi nhận
nghiệm này và tiếp tục tìm lời giải khác.
– Lần lượt đặt lại các vị trí của các hậu, bắt đầu từ hậu 4 quay dần trở lại.
– Xét hậu 4: còn ô 44 nhưng lại bị hậu 2 không chế, nên ta quay lại hậu 3.
– Xét hậu 3: các ô 32, 33 và 34 bị hậu 1 hoặc 2 không chế. Quay lại hậu 2.
– Xét hậu 2: hết ô có khả năng đặt hậu, quay lại hậu 1.
Hình H1-6.
– Bằng cách thử lại tương tự để tìm lời giải khác cho bài toán. Xét hậu 4, hậu 3 và
hậu 2 đều không tìm được ô khác. Trở lại từ hậu 1 đặt tại ô 14… (đi theo hướng này
cũng không có lời giải - người đọc tự làm tiếp).
– Kết luận: với n=4 tồn tại hai nghiệm (2,4,1,3) và (3,1,4,2)
Tóm lại, từ các ví dụ trên cho ta thấy, nghiệm của bài toán có dạng X(x 1,x2…xn)
và để giải bài toán ta thường dựa vào hai điều kiện:
– Điều kiện 1(P) để xây dựng phần tử x i: ta lần lượt đưa ra các giá trị đề cử cho xi
và kiểm tra xem các giá trị này có thoả mãn hay không. Nếu được, tiếp tục với x i+1;
nếu không, có nghĩa là đi theo hướng này không tìm được nghiệm. Ta phải quay lại
và xét lại phần tử xi-1 với một giá trị đề cử khác. Hành động này gọi là quay lui.
– Điều kiện 2(Q) để kiểm tra xem các thành phần từ x1 đến xi đã là nghiệm của
bài toán hay chưa. Nếu thoả mãn thì ghi nhận nghiệm và dừng chương trình hoặc lại
lần lượt xét lại các xi, xi-1... để tìm nghiệm khác của bài toán.
3. Các ví dụ
(Các chương trình trong phần này được viết trên môi trường Free Pascal)
Ta nhận thấy rằng, mỗi chỉnh hợp không lặp cũng có dạng X(x 1, x2…xk). Các giá
trị đề cử của xi (i=1..k) là từ 1..n. Tuy nhiên các thành phần là đôi một khác nhau (x i
<> xj: i<>j, i,j=1..k). Do vậy ta phải sử dụng một biến mảng B để quản lý các giá trị từ
1 đến n. nếu b[j] = true, chưa xét đến và ngược lại.
c. Hoán vị
Phát biểu: Liệt kê các hoán vị của dãy số nguyên từ 1..N
Vd: Xem mục 1 phần Giải thuật quay lui.
d. Tổ hợp
Phát biểu: Một tổ hợp chập k của n phần tử là một bộ không kể thứ tự gồm k
thành phần khác nhau lấy từ n phần tử đã cho, hai thành phần bất kì trong bộ đó phải
khác nhau. (n>1, k>0, n>k). Nói cách khác, một tổ hợp chập k của n phần tử là một
tập con k phần tử của nó.
Sử dụng mảng X(x1, x2…xk) chứa các phần tử của một tổ hợp chập k của N. Vấn
đề là ta phải xác định xem giá trị của x i (i=1..n)là gì và có phải dùng kỹ thuật đánh
dấu các giá trị đã được lựa chọn hay không.
– Quan sát từ hình vẽ: Xét một nút bất kỳ có giá trị A thì các nút tiếp theo thuộc
nhánh trái nhất sẽ là A+1, nút phải nhất tối đa là N. Xét thêm một vài nhánh để xem
có xác định mộ giá trị tốt hơn N không? Từ hình vẽ ta bổ sung thêm phần tử x 0=0 là
giá trị cho nút khởi đầu.
x0=0
i=1,xi=các đề cử mới(1, 2, 3), x0+1≤xi≤n-k+i, chọn x1=1
i=2,xi=các đề cử mới(2, 3, 4), x1+1≤xi≤n-k+i, chọn x2=2
i=3,xi=các đề cử mới(3, 4, 5), x2+1≤xi≤n-k+i,
chọn x3=3; i=k => một tổ hợp 1, 2, 3
chọn x3=4; i=k => một tổ hợp 1, 2, 4
chọn x3=5; i=k => một tổ hợp 1, 2, 5
hết giá trị thoả mãn cho x3, quay lui xét lại x2 và đi theo hướng mới.
i=2,xi=các đề cử còn(3,4), x1+1≤xi≤n-k+i, chọn x2=3
i=3,xi=các đề cử mới(4,5), x2+1≤xi≤n-k+i,
chọn x3=4; i=k => một tổ hợp 1, 3, 4
chọn x3=5; i=k => một tổ hợp 1, 4, 5
hết giá trị thoả mãn cho x3, quay lui xét lại x2 và đi theo hướng mới.
i=2,xi=các đề cử còn(4), x1+1≤xi≤n-k+i, chọn x2=4
i=3,xi=các đề cử mới(5), x2+1≤xi≤n-k+i,
chọn x3=5; i=k => một tổ hợp 1, 4, 5
hết giá trị thoả mãn cho x 3, quay lui xét lại x2; x2 hết lựa chọn, lui tiếp về x 1 và đi
theo hướng mới. (người đọc tự nghiên cứu tiếp)
Cài đặt chương trình:
(Chú ý: Bạn đọc hãy tìm hiểu kỹ các bài toán trên trong phần cài đặt chương
trình tại các vị trí đã được đánh dấu nghiên, đậm và cũng có thể chưa đánh dấu. Vì
nếu lướt qua ta sẽ thấy các bài này na ná giống nhau, nhưng thực chất là khác nhau) .
Liệt kê các dãy có chiều dài n dưới dạng x 1,x2...xn, trong đó xi={0,1}. Ta có thể
sử dụng sơ đồ tìm tất cả các lời giải của bài toán. Hàm Try(i) xác định x i, trong đó xi
chỉ có 1 trong 2 giá trị là 0 hay 1. Các giá trị này mặc nhiên, được chấp nhận mà
không cần phải thoả mãn điều kiện gì. Nên Hàm try(i) có thể viết như sau :
Quay lui là ban đầu ta tiến, tiến và tiến cho đến khi không tiến được nữa thì
lui và lui cho đến khi có đường đi mới, ta lại tiến và tiến… lại lui, lui cho đến khi hết
đường lui. Hết việc!
a. Thầy nguyễn Thanh Tùng tóm tắt về TÌM KIẾM QUAY LUI.
Tìm kiếm quay lui (Backtraking) là phương pháp tìm kiếm lời giải trên cây
phương án. Phương pháp này được sử dụng chủ yếu để tìm một lời giải thỏa mãn một
số yêu cầu nào đó theo nguyên tắc mở rộng dần dần lời giải.
Các bài toán điển hình:
Mã đi tuần: Tìm đường đi của quân mã trên trên bàn cờ kích thước NN, sao cho
mỗi ô trên bàn cờ (trừ ô xuất phát) được đi qua đúng một lần và trở về ô xuất phát,
Đặt quân hậu: Đặt ttối đa số quân hậu trên bàn cờ NN, sao cho không có hai
quân hậu nào ở vị trí ăn nhau,
Bài toán người bán hàng rong: Tìm đường đi khép kín ngắn nhất qua mỗi đỉnh
của đồ thị đúng một lần,
Xâu không lặp: Với M ký tự khác nhau hãy tìm xâu có độ dài N, sao cho mọi
xâu con L ký tự liên tiếp đều khác nhau,
Xâu phản đối xứng: Với M ký tự khác nhau hãy tìm xâu có độ dài N, sao cho
nếu lấy xâu con bất kỳ các ký tự liên tiếp nhau và chia nó thành hai xâu con liên tiếp
nhau, thì hai xâu con mới này khác nhau với mọi cách chia,
Thoát khỏi mê cung: Điều khiển rô bốt tìm đường ra khỏi mê cung.
Nguyên tắc cơ bản của phương pháp tìm kiếm quay lui là như sau:
Chia tập tìm kiếm thành nhiều tập con,
Đánh số các tập con theo một tiêu chuẩn nào đó có các tập P1, P2, . . ., Pk,
P
P1 P3
P2
P11 P14
P12
Kết luận:
Bài toán đưa về bài toán tối ưu tổ hợp: “Tìm Min{f(x)| x D}”
Bài toán lập lịch đúng hạn đưa về bài toán: “Tìm Max{f(x)| xD},
với D={x|x=(x1,x2,…,xn), xi {1, 2, …, n}, xi <> xj nếu i<>j; và g(x) < di}
Văn bản chương trình:
program LapLichUuTienDungHan;
uses crt;
const fin = 'LIC* HD.INP';
fout = 'LIC* HD.OUT';
maxn = 100;
var p,d,x,kqx : array[1..maxn] of integer;
cx,kqcx : array[1..maxn] of boolean;
f : text;
n : integer;
tg,count,max: integer;
{----------------------------------------------------------}
procedure Init;
var i: integer;
begin
assign(f,fin);reset(f); readln(f,n);
for i:=1 to n do read(f,p[i]);
readln(f);
for i:=1 to n do read(f,d[i]);
close(f);
fillchar(cx,sizeof(cx),true);
tg := 0; count:=0; max:=0;
end;
{----------------------------------------------------------}
procedure Try(i: integer);
var j: integer;
begin
for j:=1 to n do
begin
if cx[j] then
begin
x[i]:=j;
* Phân tích thuật toán: Chia từng số hạng của dãy cho k để tìm số dư, tính tổng
các số dư. Sau đó tính r := tổngdư mod k;
+ Nếu r = 0 thì kết luận lấy được cả dãy
0 1 2 3
Hình 2 Hình 1
Hãy xác định xem diện tích đã cho đã hợp lệ chưa? Nếu chưa, cần tìm cách
xoay lại một số ô cần thiết để diện tích là hợp lệ, sao cho số ô cần xoay là ít nhất.
Dữ liệu vào cho trong file văn bản ROT.INF, dòng đầu là số N, tiếo theo là bảng
N dòng, N cột ghi trạng thái của các ô tương ứng. Các giá trị trên cùng một dòng ghi
cách nhau ít nhất một dấu trắng.
Lời giải đưa ra file văn bản ROT.INF, trong đó nếu diện tích đã cho là hợp lệ thì
chỉ cần ghi một số 0, trái lại văn bản gồm dòng đầu tiên là số ô cần xoay, các dòng
tiếp, mỗi dòng mỗi dòng mô tả một ô cần xoay bao gồm: tọa độ hàng, tọa độ cột và
góc cần xoay theo chiều kim dồng hồ của ô (tính theo đơn vị độ - là một trong các giá
trị 90, 180, 270). Các số này ghi cách nhau ít nhất một dấu trắng.
Thí dụ:
ROT.INF (Hình 1) ROT.OUT diện tích nhận được cho bởi hình 2.
4 6 Giới hạn kích thước N 10.
2 0 1 0 1 1 270
2 0 3 2 2 1 270
2 0 2 3 2 3 180
1 2 1 0 2 4 180
3 2 270
4 2 180
Chú ý: - Các file bài làm phải được đặt tên tương ứng là BL3.PAS và BL4.PAS.
“Bài toán đưa về: duyệt các chỉnh hợp không lặp chập k của m*n phần tử, tính
giá của các phương án, só sánh giá của các phương án với nhau và giữ lại phương án
có giá lớn nhất”
* Văn bản chương trình
Program chonKSoCotongLonNhat;
uses crt;
const
fi = 'CHONK.INP';
fo = 'CHONK.OUT';
Maxmn = 100;
var
* Nếu m > n thì : “duyệt các chỉnh hợp không lặp chập n của m phần tử {1,2,
…,m}, tức là mỗi phương án cần tìm là một bộ x = (x1, x2, …, xn), xi = j nghĩa là
chọn số ở cột i hàng j; i = 1, 2,.., n; j = 1,2, …,m; tính giá của phương án x bằng công
thức f(x) = và giữ lại phương án có giá trị nhỏ nhất”
Hiện nay chưa có tài liệu chính thức dành cho lớp Chuyên Tin khối THPT. Mà
chỉ tồn tại ở dưới dạng tên chuyên đề của Bộ Giáo dục gửi về cho các trường. Do vậy
việc dạy và học gặp nhiều khó khăn trong việc thống nhất về nội dung cũng như mức
độ về kiến thức chuyên môn. Nên việc nghiên cứu và xây dựng chuyên đề này là thực
sự cần thiết.
Mục đích của chuyên đề là truyền tải một cách tổng quát, chi tiết và sự thống
nhất về mặt nội dung để người đọc dễ hiểu và thấy được tầm quan trọng của bài toán
liệt kê tổ hợp và một số bài tập ứng dụng trong Tin học dành cho học sinh chuyên tin
ở trường THPT.
Nội dung của chuyên đề đã được các tác giả chọn lọc qua chương trình đã thực
dạy tại trường và tham khảo của một số đồng nghiệp khác trong nước.
Kiến thức là vô hạn, trong chuyên đề này chúng tôi đã có gắng sáng tạo, sưu
tầm và trao đổi một cách tốt nhất có thể về mặt lý thuyết, các bài tập ứng dụng và các
bài tập trong các kỳ thi trong nước để tạo thành cuốn tài liệu hiệu quả dành cho giáo
viên và các em học sinh đam mê tin học chính thức làm tài liệu cho mình trong quá
trình học tập và nghiên cứu.