You are on page 1of 90

THPT CHUYN BC GIANG

M U

Duyt cc cu hnh t hp v ng dng

Trang 1

THPT CHUYN BC GIANG

PHN 1. L THUYT T HP
I. S LC V T HP
- Khi nim
T hp nh l mt lnh vc ca ton hc ri rc, xut hin vo u th k 17.
L thuyt t hp c p dng trong nhiu lnh vc khc nhau: l thuyt s, hnh
hc hu hn, biu din nhm, i s khng giao hon, thng k xc xut,
L thuyt t hp gn lin vi vic nghin cu s phn b cc phn t vo cc tp
hp. Cc phn t l hu hn v vic phn b chng phi tha mn nhng iu kin
no ty theo yu cu ca cng vic (bi ton).
Mi cch phn b nh th c gi l mt cu hnh t hp (mt b cc phn t
no ).
- Cc bi ton thng gp
a) Bi ton m: C bao nhiu cu hnh tha mn iu kin nu?
Dng nh gi hiu qu cng vic nh: tnh xc xut ca 1 s kin, phc
tp ca mt thut ton.
b) Bi ton lit k: Lit k tt c cc cu hnh t hp c th c (cc phng
n)
Bi ton lit k lm nn, lm c s cho nhiu bi ton khc.
c) Bi ton ti u: Ch ra mt hoc mt s cu hnh tt nht theo mt ngha no
(c gi ln nht hay c gi nh nht), l bi ton ph bin trong cuc sng
d) Bi ton tn ti: C tn ti hay khng tn ti cu hnh tha mn iu kin
no ?
V d v bi ton hnh lc gic thn b chng hn
II. NHC LI L THUYT TP HP
1. Cc khi nim v k hiu
Tp hp k hiu bng ch ci ln A, B, , X, Y,

Cc phn t k hiu bng ch ci nh: a, b, x, y,

Nu x l phn t ca tp X ta vit x X

Nu x khng l phn t ca tp X ta vit x X

Duyt cc cu hnh t hp v ng dng

Trang 2

THPT CHUYN BC GIANG

Tp A l tp con ca tp B x A x B, k hiu A B

Nu ng thi A B v B A th A = B

S cc phn t ca tp hp A, k hiu l N(A) hoc |A| (cn gi l lc lng ca


tp A)

Mt tp gm n phn t gi l mt n-tp

Tp rng l tp khng c phn t no, k hiu l


- Cc php ton trn tp hp

Giao ca 2 tp hp A v B k hiu l A B: A B = {x | x A v x B}

Hp ca 2 tp hp A v B k hiu l A B: A B = {x | x A hoc x B}

Hiu ca 2 tp hp A v B k hiu l A\B: A\B = {x | x A v x B}

Phn b ca A trong X k hiu l A : A = {x |x X v x A}

Tch cc ca 2 tp hp A v B k hiu A x B hoc A.B

A x B = {(a, b)| a A v b B}

III.

CC NGUYN L C BN

1. Nguyn l cng
V d 1: C 8 quyn sch v 6 quyn v khc nhau. Hi c bao nhiu cch chn
1 quyn trong cc quyn trn?
* Hd:
C 8 cch chn ra 1 quyn sch
C 6 cch chn ra 1 quyn v
Vi mi cch chn 1 quyn sch khng trng vi cch chn bt k mt quyn v
no v ngc li vi mi cch chn 1 quyn v khng trng vi cch chn bt k mt
quyn sch no
=>c 8 + 6 = 14 cch chn 1 quyn trong s cc quyn sch v v cho
* n gin
Gi s c m cch chn i tng x, c n cch chn i tng y v mi cch
chn i tng x khng trng vi bt k cch chn i tng y no v ngc li mi
cch chn i tng y khng trng vi bt k cch chn i tng x no th s c
m+n cch chn 1 trong cc i tng cho
* Nguyn l cng tng qut
Duyt cc cu hnh t hp v ng dng

Trang 3

THPT CHUYN BC GIANG

Nu c m1 cch chn i tng x1


C m2 cch chn i tng x2

C mn cch chn i tng xn
V mi cch chn i tng xi khng trng vi bt k cch chn i tng xj no
nu i <> j (i,j = 1,2, ,n)
Th c m1 + m2 ++ mn cch chn 1 trong cc i tng cho
=?

V d 2: Cho 2 tp hp A v B, bit |A| = m v |B| = n v AB= . Hi |AB|


V d 3: Sau khi thc hin xong cc cu lnh sau, gi tr ca K bng bao nhiu?
n1 := 10; n2 := 20; n3 := 30;
k:=0;
for i1:=1 to n1 do k := k+1;
for i2:=1 to n2 do k := k+1;
for i3:=1 to n3 do k := k+1;

V d 4: T cc ch s 1, 2, 3 c th lp c bao nhiu s khc nhau, cc ch


s trong mi s khc nhau?
* Hd VD4: V cc s trong mt s hng l khc nhau nn s cn lp t cc s 1,
2, 3 ch c th l s c 1 ch s, c 2 ch s, c 3 ch s.
Gi x1 l s cch chn s c 1 ch s
x2 l s cch chn s c 2 ch s
x3 l s cch chn s c 3 ch s
x1 = 3 (cc s 1, 2, 3)
x2 = 6 (cc s 12, 13, 21, 23,31, 32)
x3 = 6 (cc s 123, 132, 213, 231, 321,312)
v vi mi cch chn s c 1 ch s khng trng vi cch chn s c 2 ch s
v 3 ch s v ngc li
Theo nguyn l cng c 3+6+6 = 15 s khc nhau tha mn u bi
- Nguyn l nhn
V d 5: i t TP A n TP B c 3 cch chn phng tin i li (t, tu ha,
my bay), i t TP B n TP C c 4 cch chn phng tin i li (t, tu ha, tu
Duyt cc cu hnh t hp v ng dng

Trang 4

THPT CHUYN BC GIANG

thy, my bay). Hi c bao nhiu cch chn b phng tin i t TP A n TP C


phi i qua TP B?
* Hd:
Gi x1 l phng tin i t A n B, x2 l phng tin i t B n C. Khi : C
3 cch chn i tng x1, vi mi cch chn i tng x1 c 4 cch chn i tng x2
=>S cch chn b phng tin i t A B C ng bng s cch chn b
2 thnh phn (x1, x2)
= 3 x 4 = 12 cch
* Nguyn l nhn tng qut
C m1 cch chn i tng x1
vi mi cch chn i tng x1, c m2 cch chn i tng x2
vi mi cch chn b i tng (x1, x2), c m3 cch chn i tng x3
..
vi mi cch chn b i tng (x1, x2,, xn-1), c mn cch chn i tng xn
=> th c m1 x m2 x m3 x x mn cch chn 1 b c n thnh phn (x1,x2xn)
V d 6: Mt lp c 34 hc sinh. Hi c bao nhiu cch chn ra mt ban cn s
lp gm 1 lp trng, 1 lp ph, 1 b th.
Bit rng mi hc sinh c tham gia vo ban cn s ch c nhn 1 nhim v
v bt k hc snh no cng c th tham gia ban cn s?
GV a kq = 34 X 33 x 32 = 35904
V d 7: C bao nhiu s c 3 ch s khc nhau ly t tp {0,1,2,3,4,5,6,7,8,9}?
GV a kq = 10 x 9 x 8 = 720
V d 8: Cho |A| = m v |B| = n chng minh |AxB| = m*n
V d 9: Sau khi thc hin xong cc cu lnh sau, gi tr ca K bng bao nhiu?
n1 := 10; n2 := 20; n3 := 30;
k:=0;
for i1:=1 to n1 do k := k+1
for i2:=1 to n2 do k := k+1
for i3:=1 to n3 do k:=k+1;
V d 10: C bao nhiu xu nh phn di 8?
V d 11: C bao nhiu xu nh phn di n?
Duyt cc cu hnh t hp v ng dng

Trang 5

THPT CHUYN BC GIANG

GV a kq= 2n
V d 12: C bao nhiu tp con ca mt tp hp c n phn t A={a1, a2, .., an}?
* Hd v d 12:
Xt xu nh phn c n bt x1,x2, ,xn
S tng ng 1-1 gia 1 tp con ca tp hp A vi 1 dy nh phn di n.
Bi v:
nu bt xi = 1 tng ng vi vic c mt phn t ai trong tp con
nu bt xi = 0 tng ng vi vic khng c mt phn t ai trong tp con
Do , s tp con ca mt tp hp c n phn t ng bng s xu nh phn
di n = 2n
- Nguyn l b tr
Nu mt nhim v c 2 cng vic, 2 cng vic c th thc hin ng thi
Th s cch thc hin nhim v gm 2 cng vic bng tng s cch lm mi
cng vic tr i s cch lm ng thi c 2 cng vic.
V d 13: |A| = m v |B| = n
|A+B| = m + n - |A B|
V d 14: C bao nhiu xu nh phn di 8 tha mn c bt u bng 1 hoc
c 2 bt cui l 00?
* Hd v d 14:
+ Xu nh phn di 8 c bt u bng 1 l 1 b c dng: 1x2x3x4x5x6x7x8, vi
xi=(0,1) ==> c 27 = 128 xu tha mn
+ Xu nh phn di 8 c bt kt thc bng 00 l 1 b c dng: x 1x2x3x4x5x600
=> c 26 = 62 xu tha mn
+ Xu nh phn di 8 c bt va bt u bng 1, va kt thc bng 00 l 1 b
c dng: 1x2x3x4x5x600, ==> c 25 = 32 xu tha mn
Vy s xu tha mn bi l 128 + 64 32 = 160.
* Trng hp n gin: Cho 2 tp hp A v B (cha bit c ri nhau hay
khng).
Khi : N(A B) = N(A) + N(B) - N(A B)
* Trng hp tng qut: Cho m tp hu hn A1, A2, ..,Am. Khi :
N(A1A2A3...Am) = N1-N2+N3-....+(-1)m-1Nm
Duyt cc cu hnh t hp v ng dng

Trang 6

THPT CHUYN BC GIANG

Trong Nk l tng phn t ca tt c cc giao ca k_tp (tp con k phn t) ly


t m-tp cho, vi k=2,3,4, ..., m-1
c bit:
N1 = N(A1) + N(A2) + ...+ N(Am)
Nm = N(A1A2 ...Am)
V d 17: Cho 3 tp hp A, B, C. bit:
A = {0,1,2,7,11,14,25}
B = {-5,-4,0,2,7,13,15,16,19}
C = {-5,-2,2,7,13,14,16,20,21}
Hi N(A B C) = ?
* Hd: Ta c N(A) = 7; N(B)=9; N(C)=9;
N1=7+9+9 =25
N2=N(AB)+N(AC)+N(BC) = 3 + 3+5=11
N3 = N(ABC) = 2
Theo nguyn l b tr ta c:
N(A B C)=N1-N2+N3 = 25-11+2=16
V d 18: Hi trong tp X={1,2,...,10000} c bao nhiu s khng chia ht cho
bt c s no trong cc s 3,4,7?
* Bi tp tham kho
BT1: T cc s 0, 1, 2, .., 6 lp c bao nhiu s t nhin chn c 3 ch s?
BT2: C bao nhiu s c 2 ch s m ch s hang chc khc 0 v s chn?
Bt3: C bao nhiu s t nhin c 5 ch s trong s cch u 2 s gia l
ging nhau? (vd 32123)
BT4: C bao nhiu s t nhin c 6 ch s chia ht cho 5?
- Nguyn l Dirichl
Cn nht 6 th vo 5 lng th t phi c 1 lng cha t nht 2 th
* TQ: C n vt c t vo k hp, t phi c t nht 1 hp cha t nht [n /
k] vt
V d 15: C 100 ngi. Hy tm xem c t nht bao nhiu ngi c cng thng
sinh?
TL: [100/12] = 9
Duyt cc cu hnh t hp v ng dng

Trang 7

THPT CHUYN BC GIANG

V d 16: Trong s 367 ngi, c bao nhiu ngi c cng ngy sinh?
Tl: 1
IV.

MT S CU HNH T HP THNG GP

1. Hon v
1. nh ngha: Mt hon v ca n phn t (n >= 1) l
mt cch sp th t n phn t .
V d1: Cho n=3 v cc phn t l {1,2,3} th cc hon v ca 3 phn t trn l:
(1,2,3), (1,3,2), (2,1,3), (2,3,1), (3,1,2), (3,2,1)
V d 2: C 5 ngi xp hng, c chiu cao bng nhau. Hi c bao nhiu cch
xp 5 ngi thnh hng?
*Tng qut: Cho tp hp A c n phn t a1, a2, ,an. Mt hon v ca n phn t
ca tp hp A l mt b c n thnh phn (x1, x2, ,xn), xi A v xi <>xj
i,j=1,2,..,n, i<> j
2. S hon v ca n phn t k hiu l Pn
Ta c: Pn = n! = 1.2.3. .n
*Chng minh: Pn = n!
GV yu cu HS chng minh
Gi : S hon v ca n phn t ng bng s b (x1, x2, ,xn), xi A v xi<>xj
vi i <> j; ( i,j=1,2,..,n)
- Chnh hp lp chp k ca n phn t
a. nh ngha: Mt chnh hp lp chp k ca n phn t l mt b c th t
gm k thnh phn ly t n phn t cho, cc thnh phn c th c lp li.
(n>1, k>0)
V d 3: n=3, A = {1,2,3}. => cc chnh hp lp chp 2 ca 3 phn t trn: (1,1),
(1,2), (1,3), (2,1), (2,2), (2,3), (3,1), (3,2), (3,3)
*Tng qut: Cho tp hp A c n phn t a1, a2,an.
Mt chnh hp lp chp k ca n phn t ca tp hp A l mt b gm k thnh
phn (x1, x2, ,xk), xi A, i=1,2,..,k

Duyt cc cu hnh t hp v ng dng

Trang 8

THPT CHUYN BC GIANG

2. S chnh hp lp chp k ca n phn t k hiu l A kn


: A kn = nk
*Chng minh: A kn = nk
GV yu cu HS chng minh da trn nguyn l nhn
V d 4: M kha s c 3 ch s ly t tp c 10 phn t ={0,1,2,3,4,5,6,7,8,9}.
Hi c bao nhiu trng thi ca m s?
GV hng dn HS:
M kha s l b c 3 thnh phn (x1,x2,x3), vi xi A, i=1,2,3
Vy mi trng thi ca m s l mt chnh hp lp chp 3 ca 10 phn t ca tp
hp A. => s trng thi ca m s bng s chnh hp lp chp 3 ca 10 phn t = A103
= 103 = 1000
- Chnh hp khng lp chp k ca n phn t
a) nh ngha: Mt chnh hp khng lp chp k ca n phn t l mt b c th t
gm k thnh phn khc nhau ly t n phn t cho (n>1, k>0, n>k).
V d 5: n=3, A = {1,2,3}. => cc chnh hp khng lp chp 2 ca 3 phn t
trn: (1,2), (1,3), (2,1), (2,3), (3,1), (3,2)
V d 6: Cho n=3, k=2 v A = {x, a, y}. => cc chnh hp khng lp chp 2 ca
3 phn t trn: (x,a), (x,y), (a,x), (a,y), (y,x), (y,a)
*Tng qut: Cho tp hp A c n phn t a1, a2, ,an.
Mt chnh hp khng lp chp k ca n phn t ca tp hp A l mt b gm k
thnh phn (x1, x2, ,xk), xi A, i,j = 1,2, .., k v xi <> xj nu i<>j
b)S chnh hp khng lp chp k ca n phn t k hiu l A kn
A kn = n.(n-1). ... .(n-k+1) =

n!
(n k)!
n!

*Chng minh: A kn =n.(n-1). ... .(n-k+1)= (n k)!


GV yu cu HS chng minh da trn nguyn l nhn
- T hp k ca n phn t
a) nh ngha: Mt t hp chp k ca n phn t l mt b khng k th t gm k
thnh phn khc nhau ly t n phn t cho, hai thnh phn bt k trong b phi
khc nhau. (n>1, k>0, n>k)

Duyt cc cu hnh t hp v ng dng

Trang 9

THPT CHUYN BC GIANG

Ni cch khc, mt t hp chp k ca n phn t l mt tp con k phn t ca n.


V d 7: Cho A = {1,2,3,4}. n=4, k=3. => cc t hp chp 3 ca 4 phn t l:
(1,2,3), (1,2,4), (1,3,4), (2,3,4)
*Tng qut: Cho tp hp A c n phn t a1, a2, ,an.
Mt t hp chp k ca n phn t ca tp hp A l mt tp con gm k thnh phn
(x1, x2, ,xk), xi A, i= 1,2, .., k v x1 < x2 < x3 < ... , xk
n!

b)S t hp chp k ca n phn t k hiu l C kn : C kn = k!(n k)!


T tng: Xy dng s chnh hp khng lp chp k ca n phn t bng phng
php phn hoch.
B1: T tp n phn t cho ta ly ra tt c cc tp con k phn t (x1,x2xk)
==> C C kn cch chn ra 1 tp con k phn t t tp n phn t.
B2: Vi mi tp con k phn t, ta sp th t k phn t ca tp con ==> c k!
cch sp th t.
Mi cch sp th t ca k phn t l mt chnh hp khng lp chp k ca n
phn t cho.
=> theo nguyn l nhn c A kn = C kn . k!
Tht vy:
Trc tin, ta xt tp cc chnh hp khng lp chp k ca n phn t.
Ta chia tp thnh cc lp sao cho cc chnh hp khng lp chp k ca n
phn t trong cng mt lp ging nhau v cc phn t nhng khc nhau th t
sp xp (Tc l, cc chnh hp khng lp chp k ca n ca 1 lp l cc hon v
ca cng 1 tp con).
- V d: Tp cc chnh hp khng lp chp 3 ca. 4 phn t {1,2,3,4} c chia
thnh 4 lp nh sau:
Lp 1: (1,2,3), (1,3,2), (2,1,3),(2,3,1),(3,1,2),(3,2,1)
Lp 2: (1,2,4), (1,4,2), (2,1,4),(2,4,1),(4,1,2),(4,2,1)
Lp 3: (1,3,4), (1,4,3),(3,1,4),(3,4,1),(4,1,3),(4,3,1)
Lp 4: (2,3,4), (2,4,3),(3,2,4),(3,4,2),(4,2,3),(4,3,2)
- Ta nhn s lp ng bng s tp con k phn t ca tp n phn t cho (s t
hp chp k ca n). Vi mi lp li c k! chnh hp khng lp chp k ca n phn t.
Nu ta k hiu C kn l s t hp chp k ca n th theo nguyn l nhn ta c:

Duyt cc cu hnh t hp v ng dng

Trang 10

THPT CHUYN BC GIANG

A kn = C kn . k!, => C kn =

n!
A kn
= k!(n k)! (PCM)
k!

V d 8: C n i bng thi u vng trn sao cho c 2 i bt k gp nhau ng


mt trn. Hi phi t chc bao nhiu trn u?
* Hd v d 8:
C 2 i th c 1 trn u. Suy ra s trn u bng s cch chn 2 i t n i,
bng C n2 =

n.(n 1)
2

V d 9: Hi c bao nhiu giao im ca cc ng cho ca mt a gic li n


nh (n > 4) nm trong a gic. Gi thit rng khng c ba ng cho no ng quy
ti im trong a gic.
* Hd v d 9:
C 4 nh ca a gic, c mt giao im ca 2 ng cho nm trong a gic.
Vy s giao im ca cc ng cho nm trong a gic ng bng s cch ly
ra 4 nh t tp n nh ca a gic li cho.
n!

=> S giao im cn m l: C n4 = 4!.(n 4)! =

n.(n 1).(n 2)(n 3)


24

c) Mt vi tnh cht quan trng ca cc h s t hp


+ Tnh i xng: C kn = C n kn
+ iu kin u: C n1 = C nn =1
+ Cng thc quy: C kn = C kn 11 + C n k1 vi n.k>0
n

+ Tng tt c cc tp con ca tp n phn t

C
k =0

k
n

= 2n

+ Cng thc nh thc Niutn


(x+y)n = C n0 xn + C n1 xn-1.y + ... + C n n1 x.yn-1+ C nn yn

Duyt cc cu hnh t hp v ng dng

Trang 11

THPT CHUYN BC GIANG

PHN 2. PHNG PHP SINH


I. Khi nim
Phng php sinh c s dng trong bi ton lit k, v d nh ngi ta cn
lit k t hp chp k ca n phn t hay hon v ca mt tp s, hay khi ngi cn lm
mt bi ton m khng th p dng cc phng php thng minh nh quy hoch
ng, chia tr th phng php lit k xt vt cn l s la chn cui cng.
Phng php sinh l phng php t cu hnh u tin ta sinh ra cc cu hnh tip
theo. Khng phi bi no cng c th lm theo phng php sinh, yu cu ca bi
ton c th lm theo phng php sinh l:
- Th nht phi xc nh c cu hnh u v cu hnh cui
- Th hai phi xc nh c cu hnh tip theo bng 1 cng thc nht nh
Vic xc nh cu hnh u tin v cu hnh cui cng l do yu cu t ra ca
tng bi ton v do cch xc nh ca tng ngi lp trnh.
Yu cu quan trng hn khi s dng phng php sinh l lm sao t cu hnh
ang c ta c th a ra c cu hnh tip theo hoc l khng nh l cu hnh
cui cng. Ta tm gi bi ton t cu hnh ban u sinh ra cu hnh tip theo c th
tc l sinh_k_tip. Khi bi ton s dng phng php sinh c vit nh sau:
Procedure Generate;
Begin
<Xy dng cu hnh ban u>;
Stop := False;
While not Stop Do
Begin
<a ra cu hnh ang c>;
sinh_k_tip;
End;
End;
Trong th tc sinh_k_tip, nu cu hnh ang c l cui cng th th tc ny
cn gn cho bin Stop gi tr True, ngc li th tc ny s xy dng cu hnh k tip
ca cu hnh ang c trong th t xc nh.

Duyt cc cu hnh t hp v ng dng

Trang 12

THPT CHUYN BC GIANG

II. p dng phng php sinh vo gii mt s bi ton


1. Bi ton 1: Lit k tt c cc dy nh phn c di N.
Bi ton c th c pht biu nh sau: Cho N l mt s nguyn dng, hy ch
ra tt c cc dy b1, b2, , bN vi bi {0; 1}, (1 i N).
V d vi N = 3 ta c cc dy l:
1. 0 0 0

5. 1 0 0

2. 0 0 1

6. 1 0 1

3. 0 1 0

7. 1 1 0

4. 0 1 1

8. 1 1 1

Phn tch bi ton: Ta c th thy ngay dy u tin l 0 0 0 0 (dy ton s 0)


v dy cui cng l 1 1 1 1 (dy ton s 1).
T cu hnh ang c th cu hnh tip theo c xy dng bng cch cng thm
1 (cng nh phn) nu ta cch biu din cu hnh l biu din nh phn ca mt s
nguyn. V d t cu hnh 0 1 0 (2) th cu hnh tip theo l 0 1 1 (3).
T cu hnh ang c b1, b2, , bN ta c th xy dng cu hnh tip theo vi qui
tc sau
- Tm i u tin (theo th t i = n, n-1, .. 1) tho mn bi = 0;
- Gn li bi = 1 v bj = 0 vi tt c j > i. Dy mi thu c s l dy cn tm.
V d: Xt dy nh phn di 10, b = 1001001111.
+ Ta tm c i u tin = 5.
+ By gi ta gn b5 =1 v b6, b7, b8, b9, b10 = 0 Xu nh phn k tip l
1001010000 (tng ng vi 1001001111 (591) + 1 = 1001010000 (592))
Thut ton sinh k tip cho bi ton ny c din t nh sau:
Procedure Next_Bit_String;
Begin
i := n;
while bi = 1 do
Begin
bi := 0;
i := i -1;
End;
bi := 1;
End;
Chng trnh ca bi ton:
Duyt cc cu hnh t hp v ng dng

Trang 13

THPT CHUYN BC GIANG

Program Bai1;
var n, i: integer;
b: Array[1..20] of 0..1;
count : word;
stop : boolean;
Procedure init;
var i: integer;
Begin
Write('Do dai day nhi phan = '); readln(n);
for i := 1 to n do b[i] := 0;
stop := false;
count := 0;
End;
Procedure Next_Bit_String;
Var i: integer;
Begin
i:=n;
while (i>=1) and (b[i]=1) do
Begin
b[i] := 0;
i := i-1;
End;
if i < 1 then stop := True Else b[i] := 1;
End;
BEGIN
init;
While not (stop) do
Begin
count := count + 1;
Write(Count:5);
For i := 1 to n do Write(b[i]:2); writeln;
Next_Bit_String;
End;
Write('Bam phim Enter de thoat khoi Chuong trinh '); Readln;
END.
- Bi ton 2: Lit k cc tp con m phn t ca tp n phn t.
Bi ton c th pht biu nh sau: Cho tp hp Cho X = {1, 2, 3, .. , n}. Hy lit
k cc tp con c m phn t ca X. V d: X= {1, 2, 3, 4, 5}, m= 3. Cc tp con 3
phn t ca X l:

Duyt cc cu hnh t hp v ng dng

Trang 14

THPT CHUYN BC GIANG

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}

Phn tch bi ton:


Mi tp con m phn t ca X c th biu din bi b c th t gm m thnh
phn a = {a1, a2, .., am} tho mn 1 a1 < a2 < am n.
Ta thy cu hnh u tin l {1, 2, 3, , m} v cu hnh cui cng l {n-m+1, nm+2, , n}
T cu hnh ang c {a1, a2, .., am } ta tm cu hnh tip theo bng cch:
- Tm t bn phi dy a1, a2, , a3 phn t ai n-m+i;
- Thay ai bi ai+1;
- Thay aj bi ai + j i vi j = i+1, i+2, , m.
V d: Vi n = 6 v m = 4. Gi s tp con ang c l {1, 2, 5, 6}, cn xy dng
tp con k tip.
+ Ta tm c i = 2
+ Thay a2 = 3
+ Thay a3=4, a4= 5
ta c tp con k tip l {1, 3, 4, 5}
Thut ton sinh k tip cho bi ton ny c din t nh sau:
Procedure Next_Combination;
Begin
i := m;
while ai = n m + i do i := i - 1;
ai := ai + 1;
for j := i + 1 to n do aj := ai + j - i;
End;
Chng trnh ca bi ton c din t nh sau:
Program tap_con;
Var

n, m,i : integer;
a: Array[1..20] of integer;
count: longint;

Duyt cc cu hnh t hp v ng dng

Trang 15

THPT CHUYN BC GIANG

stop : boolean;
Procedure init;
Var i : integer;
Begin
Write('Moi nhap N '); Readln(n);
Write('Moi nhap M '); Readln(m);
For i:= 1 to m do a[i] := i;
stop := false;
count := 0;
End;
Procedure Next_Combination;
Var i, j: integer;
Begin
i := m;
while (i>0) and (a[i] = n-m+i) do i := i-1;
if i = 0 then stop := True
else
begin
a[i] := a[i]+1;
for j := i+1 to m do a[j] := a[i]+j-i;
end;
End;
BEGIN
init;
while not stop do
begin
count := count+1;
Write(count:5);
for i := 1 to m do write(a[i]:3); writeln;
Next_Combination;
Duyt cc cu hnh t hp v ng dng

Trang 16

THPT CHUYN BC GIANG

end;
Write('Bam Enter de ket thuc '); Readln
End.
- Bi ton 3: Lit k cc hon v ca tp n phn t.
Bi ton c th pht biu nh sau: Cho X = {1, 2, 3, .. , n}. Hy lit k cc hon
v t n phn t ca X. V d vi n = 3 th cc hon v ca n l:
1. (1, 2, 3)

4. (2, 3, 1)

2. (1, 3, 2)

5. (3, 1, 2)

3. (2, 1, 3)

6. (3, 2, 1)

Phn tch bi ton:


Ta thy ngay theo th t trn th cu hnh u tin l: (1, 2, 3, . . n) v cu hnh
cui cng l (n, n-1, ..., 2, 1).
Cn xy dng thut ton t cu hnh ang c l (a1, a2, , an) ta tm c cu
hnh tip theo. T cu hnh ang c {a1, a2, , an} ta xy dng cu hnh tip theo
bng qui tc:

Tm j u tin tho mn aj<aj+1 (j gim t n, n-1, , 1);

Tm ak l s nh nht v ak>aj trong cc s aj+1, aj+2, , an;

i ch aj vi ak;

o ngc on t aj+1 n an.


V d vi n = 6, cu hnh ang c l (3, 6, 2, 5, 4, 1)
+ Ta tm c j = 3
+ Ta tm c k = 5
+ Hon v a3 vi a6 ta c (3, 6, 4, 5, 2, 1)
+ o ngc on a4, a5, a6 ta c (3, 6, 4, 1, 2, 5)
Cu hnh tip theo l (3, 6, 4, 1, 2, 5)
Chng trnh ca bi ton l:
Program hoan_vi;
Var

a:array[1..100] of integer;
n,i: integer;
count: longint;

Duyt cc cu hnh t hp v ng dng

Trang 17

THPT CHUYN BC GIANG

stop : Boolean;
Procedure init;
var i: integer;
Begin
Write('Moi nhap vao N '); Readln(n);
For i := 1 to N do a[i]:=i;
Stop := False;
Count := 0;
end;
Procedure next_Permution;
Var j,k,l,m:integer;
tg: integer;
Begin
j := n-1;
while (j >0) and (a[j] > a[j+1]) do dec(j);
if j = 0 then stop := True else
begin
k := n;
while a[j] > a[k] do dec(k);
tg := a[j];
a[j] := a[k];
a[k] := tg;
l := n;
m := j+1;
while l > m do
begin
tg := a[l];
a[l] := a[m];
a[m] := tg;
dec(l);
Duyt cc cu hnh t hp v ng dng

Trang 18

THPT CHUYN BC GIANG

inc(m);
end;
end;
end;
BEGIN
init;
while not stop do
begin
inc(count); write(count,'. ');
For i := 1 to N do write(a[i]:3); writeln;
next_permution;
end;
Write('Bam Enter de ket thuc '); Readln;
END.
- Bi ton 4: Phn tch s nguyn dng N thnh tng cc s
nguyn khng m.
Bi ton c pht biu nh sau: Cho mt s nguyn dng N. Hy lit k cc
cch phn tch N thnh tng cc s nguyn khng m. V d vi N = 4, ta c th phn
tch thnh:
1. 4
2. 3 + 1
3. 2 + 2
4. 2 + 1 + 1
5. 1 + 1 + 1 + 1
Phn tch bi ton:
Ta c th thy ngay cu hnh u tin l: N v cu hnh cui cng l 1 1 1 1
(N ch s 1).
Cn xy dng thut ton t cu hnh ta tm c cu hnh tip theo. T cu
hnh a1, a2, , ak ta c th xy dng cu hnh tip theo vi quy tc sau:
- Tm i u tin sao cho ai 1 (i gim t k, k-1, 1)
- Thay ai = ai -1
Duyt cc cu hnh t hp v ng dng

Trang 19

THPT CHUYN BC GIANG

- Phn tch (k-i+1) thnh cc s nh s:


+ Gn aj :=ai vi j t i+1 n i + [(i+ k-i+1) div ai ];
+ Gn aj+1 := [(k-i+1) mod ai] nu [(k-i+1) mod ai] 0
(S phn t c phn tch thnh by gi l i + [(k-i+1) div ai] + [(k-i+1) mod ai]
V d: Vi N=10
*T cu hnh 4 4 1 1 (k=4)
- Ta tm c i = 2
- a2 := a2 - 1 (a2 = 3)
- ta c k-i+1 div a2 = 1 v k-i+1 mod a2 = 0 s phn t tip theo l 1 l
a3 = a2 (a3 = 3)
Cu hnh tip theo l: 4 3 3
*T cu hnh 4 3 3 (k=3)
- Ta tm c i =3
- a3 := a3-1 (a3 = 2)
- Ta c k-i+1 div a3 = 0 v k-i+1 mod a2 = 1 s phn t tip theo l 1
l a4 = 1
Cu hnh tip theo l: 4 3 2 1
Chng trnh ca bi ton l:
Program phan_tich;
Var c: array[1..1000] of integer;
k, n: integer;
count: longint;
Stop: Boolean;
Procedure init;
Var
i,j:integer;
Begin
Write('Moi nhap so nguyen duong N '); Readln(N);
k := 1;
c[k] := n;
Count := 0;
Stop := False;
end;
Procedure Result;
Var
i: integer;
Begin
Duyt cc cu hnh t hp v ng dng

Trang 20

THPT CHUYN BC GIANG

inc(count);
Write(count,'. ');
For i := 1 to k do write(c[i]:3);
writeln;
End;
Procedure Next_Division;
Var i, j, r, s, d : integer;
Begin
i := k;
while (i>0) and (c[i] =1) do dec(i);
if i>0 then
begin
c[i] := c[i]-1;
d := k-i+1;
r := d div c[i];
s := d mod c[i];
k := i;
if r>0 then
begin
for j := i+1 to i+R do c[j]:=c[i];
k := k+r;
end;
if s>0 then
begin
k := k+1;
c[k] := s;
end;
end else stop := True;
End;
Procedure Division;
Var i: integer;
Begin
While not stop do
begin
result;
next_division;
end;
Write('Bam Enter de ket thuc '); Readln
End;
BEGIN
init;
Duyt cc cu hnh t hp v ng dng

Trang 21

THPT CHUYN BC GIANG

division;
END.
Nh vy, vi mi bi ton nh trn, khi s dng phng php sinh vo gii
quyt chng ta thng gp kh khn nh sau: mt l vic xc nh cu hnh u tin
v cu hnh cui cng, hai l vic xc nh c quy tc t cu hnh ang c ta tm
ra c cu hnh tip theo (sinh ra cu hnh tip theo). Chnh v nguyn nhn m
phng php sinh khng c s dng rng ri vo gii quyt cc bi ton nh thut
ton quay lui, quy hoch ng, Phng php sinh ch c s dng vo gii quyt
mt s bi ton lit k cc cu hnh t hp n gin.

Duyt cc cu hnh t hp v ng dng

Trang 22

THPT CHUYN BC GIANG

PHN 3. GII THUT QUAY LUI


1. tng
Trc ht ta xt 2 v d sau tm hiu th no l quay lui.
V d 1: Lit k dy hon v t 1..n.
Xt trng hp n=3 ta c cy lit k cc hon v ca n nh sau:

Hnh H1.
Gi D l tp hp cc phn t t 1 n n (n=3), trong tp hp D=(1,2,3) ln lt
ly cc gi tr X(x1, x2, x3) c mt hon v.
V d: HV(1,2,3); HV(2,3,1); HV(1,3,2)...
Ban u trong D, cc gi tr 1, 2 v 3 u sn sng.

Bc 1, D(1,2,3) ta chn x1=1, nh du chn 1 trong cn D(2,3).

Bc 2, D(2,3) chn x2=2, nh du chn 2 hay D(3).

Bc 3, D(3) chn x3=3, nh du chn 3 hay D().


Xt thy dy X tho mn l mt hon v X=123 (chn n=3 gi tr x1, x2 v
x3), ghi nhn hon v ny. Tip tc tm kim cch thay th gi tr ca cc xi
(i=1..3) c hon v khc.
Thng thng v trnh trng hp b xt nghim ta thng bt u xt li
theo quy lut no . Trong bi ton ny, ta bt u t x3 tr v trc. Chn gi
tr khc 3 trong D cho x3, gii phng phng 3. Xt thy trong D khng cn gi tr
no tho mn. Vy ta phi xem xt li t x2 (ti Bc 2).

Duyt cc cu hnh t hp v ng dng

Trang 23

THPT CHUYN BC GIANG

Tt nhin, khi tr li bc 2. Phn t ang xt l x 2, c ngha l x3 cha nhn


gi tr no v x2 cng khng nhn li gi tr 2 na v nhn trc ri (
trnh trng nghim v mt thi gian)... T hnh v trong v d ny l ta trc tip
nhn thy. Nhng vi s lng cc phn t trong D nhiu v rt nhiu, ng thi
vi my tnh khng th suy lun v nhn thy theo cch ny m phi dng k
thut nh du thng qua cc bin hoc k xo lp trnh ghi nhn cc gi tr
hoc cha xt.

(Bc 2.2)Ti y ta chn gi tr khc cho x2 trong D, chn x2=3 tho mn.

(Bc 2.3) Chn mt gi tr cho x3 trong D, c x3=2 tho mn.


Xt thy dy X tho mn l mt hon v X=132, tm cc hon v khc ta li
bt u t x3 ngc tr li, tm mt gi tr trong D khng lp li v cha c
chn.
Li tm gi tr khc cho x3, khng tm thy gi tr no trong D tho mn, quay
li Bc 2.2 (Bc 2), ti y cng khng tm c gi tr no tho mn cho x 2.
Tip tc quay v bc trc l Bc 1 xc nh li x1.

(Bc 1.2) Ta chn x1=2, trong cn D(1,3). Tip theo ta chn x2=1, trong cn
D(3) v cui cng chn x3=3. Tho mn l mt hon v X=213. Tip tc tm cc hon
v khc, li quay ngc tr li cho n khi tm c gi tr tho mn cho xi no .

C nh vy cho n khi khng cn quay lui c na. Thut ton kt thc v ta


tm xong cc nghim ca bi ton.
V d 2: Cho bn c vua NxN, hy tm tt c cc cch t N qun hu ln bn c
sao cho khng qun no n c qun no.

H1-1

Mt li gi ca bi ton khi n=4. Hnh H1-1.


Ta nhn thy rng mi qun hu s c t trn mt hng, nn ta gi qun hu
t hng 1 l hu 1, qun hu t hng 2 gi l hu 2 qun hu hng n gi l
qun hu n. Vn l tm xem hu i c t ti ct j no (j=1..n) sao cho khng hu
no n c hu no.
* Hd:

t tt c cc hu ti u mi hng nh hnh H1-2, sau ln lt t cc qun


hu t 1 n n vo cc ct tng ng t 1 n n sao cho khng hu no n c nhau.
Duyt cc cu hnh t hp v ng dng

Trang 24

THPT CHUYN BC GIANG

t hu 1- vo 11, t hu 2- vo 23 ( 21 v 22 b hu 1 n c), ti dng


3 cc u b hu 1 hoc hu 2 khng ch, vy i theo cch ny khng c. quan st
hnh nh sau:
Cc v tr nh du
(X) b hu t trc
khng ch

H1-3

Do vy ta phi t li hu 2.
du chm m
th hin v tr
c th t
trc
H1-4

t hu 2 vo 24, hu 3 vo 32, -> khng c cch t hu 4, i theo hng


ny khng c li gii. Nn ta chn li cch t hu 3, t hnh H1-4 thy rng khng
cn cch t khc cho hu 3, nn ta quay li v th t li hu 2 mt ln na, t hnh
H1-4 thy rng khng cn cch t hu 2. Ta tip tc quay li tm cch t li hu 1.
Cn vi cch t hu 1 ti 11 th s khng tm thy li gii. By gi ta t hu 1
sang 22 v tip tc vi cc hu khc ta c kt qu nh sau:

H1-5

T bn c cui trong hnh H1-5 ta thy y l mt li gii ca bi ton, ghi nhn


nghim ny v tip tc tm li gii khc.

Ln lt t li cc v tr ca cc hu, bt u t hu 4 quay dn tr li.

Xt hu 4: cn 44 nhng li b hu 2 khng ch, nn ta quay li hu 3.

Xt hu 3: cc 32, 33 v 34 b hu 1 hoc 2 khng ch. Quay li hu 2.

Xt hu 2: ht c kh nng t hu, quay li hu 1.

Duyt cc cu hnh t hp v ng dng

Trang 25

THPT CHUYN BC GIANG

Xt hu 1: t vo 13; hu 2 t vo 21; 31, 32 v 33 khng tho mn nn


t hu 3 vo 34 v cui cng t hu 4 vo 42. Ta thu c nghim ca bi ton,
quan st hnh nh di y:

Hnh H1-6.

Bng cch th li tng t tm li gii khc cho bi ton. Xt hu 4, hu 3 v


hu 2 u khng tm c khc. Tr li t hu 1 t ti 14 (i theo hng ny
cng khng c li gii - ngi c t lm tip).

Kt lun: vi n=4 tn ti hai nghim (2,4,1,3) v (3,1,4,2)

Tm li, t cc v d trn cho ta thy, nghim ca bi ton c dng X(x1,x2xn)


v gii bi ton ta thng da vo hai iu kin:

iu kin 1(P) xy dng phn t xi: ta ln lt a ra cc gi tr c cho xi


v kim tra xem cc gi tr ny c tho mn hay khng. Nu c, tip tc vi x i+1;
nu khng, c ngha l i theo hng ny khng tm c nghim. Ta phi quay li
v xt li phn t xi-1 vi mt gi tr c khc. Hnh ng ny gi l quay lui.

iu kin 2(Q) kim tra xem cc thnh phn t x1 n xi l nghim ca


bi ton hay cha. Nu tho mn th ghi nhn nghim v dng chng trnh hoc li
ln lt xt li cc xi, xi-1... tm nghim khc ca bi ton.
- Thut ton quay lui
Ni dung chnh ca thut ton ny thng dng gi cc bi ton lit k v ti
u t hp m nghim ca n l mt dy cc thnh phn X=(x 1xn) c ly ra t
mt tp hp d liu cho trc D theo mt th t v iu kin c th.
xy dng thut ton ny ta thc hin theo tng sau: gi s ta ang xt
thnh phn xi trong D xem c tho mn iu kin P hay khng, nu tho mn th ghp
vo nghim sau xt tip thnh phn xi+1, cn nu khng tm thy xi no tho mn
iu kin (P hoc Q), th quay tr li thnh phn trc l xi-1, b gi tr ny i v
ti y tm mt gi tr khc tho mn P cho xi-1. Sau li tip tc tm xi, xi+1 cho
n khi tho mn Q.
Vit li tng theo nh sau:
Bc 1: Xut pht t tp hp D, ta tm c cc thnh phn ca nghim X=(x 1
xi) c ly trong D tho P.
Duyt cc cu hnh t hp v ng dng

Trang 26

THPT CHUYN BC GIANG

Bc 2: Nu X tho Q dng thut ton, thng bo tm c nghim X. Nu


khng tho Q chuyn sang bc 3.
Bc 3: Xt tit thnh phn xi+1 b sung cho X: (x1xi+1) tho P. Xy ra
trng hp sau y:
Tm c xi+1, quay li Bc 2.
Khng, tc l vi mi xi+1 th (x1xi+1) khng tho P, c ngha l nghim X
theo hng (x1xi) xt s khng i n kt qu, do vy ta phi chn mt gi
tr khc trong D cho xi lm c iu ny ta gim i mt n v ri quay v
Bc 3.
Cch lm nh trn gi l quay lui mt bc tm nghim ca bi ton theo
hng khc. (thut ton, gi thut, tm kim + quay lui hoc backtracking).
m bo cho vic vt cn mi kh nng c th c, cc gi tr c khng
c b st. m bo vic xt khng b trng lp, khi quay lui xc nh li cc
xi cn khng th li cc gi tr th ri. Lc ny ta cn kt hp k thut nh du
hp l cc gi tr th trc v khi quay lui ta cn tr v trng thi c.
T tng trn ta a ra hai s gii bi ton quay lui tm nghim khng
quy nh sau:
Khi to X, X tho P

Khi to X, X tho P

Repeat

Repeat

If X tho Q then
Begin

If X tho Q then
Begin

Ghi nhn nghim;

Ghi nhn nghim;

Exit;

Exit;

[Li; tm cc nghim;]

[Li; tm cc nghim;]

End;
If Tm mt nc i Then Tin
Else Li;

End;
If Tm mt nc i Then Tin
Else Li;

Until False;

Until False;

If khng nghim Then

If khng nghim Then

Else Begin

Begin

Ghi nhn v nghim;

Ghi nhn v nghim;

Exit;

Exit;

Duyt cc cu hnh t hp v ng dng

Trang 27

THPT CHUYN BC GIANG

End;

End;

Di y l cch th hin dng quy tm thnh phn th i ca nghim:

Duyt cc cu hnh t hp v ng dng

Trang 28

THPT CHUYN BC GIANG

Procedure Try(i : Integer);


{Xc nh thnh phn xi bng quy}
Var j: Integer;
Begin
For <j tp cc kh nng c> do
If <chp nhn j> then
Begin
<xc nh xi theo j>;
if i = n then
Begin
<ghi nhn nghim>;
[exit; tm nghim u tin v thot]
End
Else Begin
[ghi nhn trng thi mi];
Try(i+1);
[tr li trng thi c];
End;
End;
End;
Trong chng trnh chnh ch cn li gi Try(1) khi ng c cu quy hot
ng. Tt nhin, trc y cn khi to cc gi tr ban u cho cc bin. Thng
thng vic ny c thc hin qua mt th tc no y m ta gi l Init.
Trong th tc Try(i: integer) ta xem xt k cc vn sau:

Tp cc kh nng c: Cc gi tr c thng thng ln hn s c chp


nhn. S chnh lch ny cng ln th thi gian phi th cng nhiu, v th cng thu
hp c din c cng nhiu cng tt (nhng khng c b st !). Vic ny ph
thuc vo vic phn tch cc iu kin rng buc ca cu hnh pht hin nhng
iu kin cn ca cu hnh ang xy dng. L tng nht l cc gi tr c c
mc nhin chp nhn. Trong trng hp ny mnh <chp nhn j> c b qua (v
th cng khng cn cc bin trng thi).
V d: duyt cc chnh hp lp chp k ca n gi tr 1,2,,n. Mi chnh hp c
t chc nh mt mng k thnh phn:
x[1], x[2], ,x[k]

Duyt cc cu hnh t hp v ng dng

Trang 29

THPT CHUYN BC GIANG

trong , mi x[i] c th ly mt trong cc gi tr t 1 n n. Theo nh ngha


chnh hp lp, cc gi tr ny l c lp vi nhau, v th vic c bt k gi tr no
t 1 n n cho x[i] u mc nhin c chp nhn. Cc chnh hp chp 3 (k=3) ca 5
(n=5) gi tr 1,2,3,4,5 gm nk = 53 =125 b nghim.

iu kin chp nhn : iu kin chp nhn mt gi tr c c tnh ton


trong thn vng lp ca th tc quy Try, v th tit kim c mt php ton trong
biu thc ny l tit kim c v s cc php ton thc s phi lm. Thng thng,
iu kin chp nhn tnh ti bc i ph thuc vo c nhng bc trc, v th tit
kim s php ton, ngi ta thng dng mt s k thut sau:
T chc nhng bin trng thi lu tr nhng thng tin cn thit. Thay v
phi tnh li, ta c th truy xut cc gi tr ca nhng bin ny. Vic dng mt s
bin trng thi, tuy phi tr gi bng mt s vng nh nht nh nhng tit kim
c nhiu thi gian tnh. Vic t chc hp l cc bin trng thi cng l mt k
thut lm tng hiu qu ca vic duyt.
Trong nhng tnh hung phi tnh li, c gng k tha kt qu ca nhng bc
trc bng cch t chc thm nhng tham s cho th tc quy Try truyn
cho nhng bc k tip.
Ni chung, vic a ra c mt biu thc n gin tnh iu kin chp
nhn c l kt qu ca vic phn tch k lng bi ton cng nh t chc tt
d liu. Mt khc, iu kin ny c tnh cng st cng tt, n gip ta li sm
hn (tit kim thi gian hn) trong qu trnh tm kim.

Ghi nhn trng thi mi v tr li trng thi c: tu theo tng bi c th.


- Cc v d
(Cc chng trnh trong phn ny c vit trn mi trng Free Pascal)
a.

Chnh hp lp

Pht biu: Mt chnh hp lp chp k ca n phn t l mt b c th t gm k


thnh phn ly t n phn t cho, cc thnh phn c th c lp li. (n>1, k>0)
Vd: k=2, n=3. => cc chnh hp lp chp 2 ca 3 phn t nh sau: (1,1), (1,2),
(1,3), (2,1), (2,2), (2,3), (3,1), (3,2), (3,3)
Nhc li: duyt cc chnh hp lp chp k ca n gi tr 1,2,,n. Mi chnh hp
c t chc nh mt mng k thnh phn:
x[1], x[2], ,x[k]
trong , mi x[i] c th ly mt trong cc gi tr t 1 n n. Theo nh ngha
chnh hp lp, cc gi tr ny l c lp vi nhau, v th vic c bt k gi tr no
t 1 n n cho x[i] u mc nhin c chp nhn. Do vy, trong bi ton ny ta
Duyt cc cu hnh t hp v ng dng

Trang 30

THPT CHUYN BC GIANG

khng cn quan tm ti gi tr no c chn hay cha. V d, cc chnh hp chp


3 (k=3) ca 5 (n=5) gi tr 1,2,3,4,5 gm nk = 53 =125 b nghim.
Ci t chng trnh:

Input: tp Chlap.inp cha hai s nguyn dng n v k.

Output: tp Chlap.out nhiu dng, mi dng cha 1 s nguyn (l s tt chnh hp


lp) v 1 cu hnh chnh hp lp.
Chlap.inp Chlap.out
32

1:
2:
3:
4:
5:
6:
7:
8:
9:

1
1
1
2
2
2
3
3
3

1
2
3
1
2
3
1
2
3

{CHINH HOP LAP CHAP K CUA N}


uses crt;
const MaxN=100; { th 100 phn t}
fi='chlap.inp';{chua so N va k}
fo='chlap.out';{moi dong chua mot chinh hop lap}
Var
x:array[1..MaxN] of Integer;
n,k,d:integer;
f:text;
procedure Init;
var i:integer;
Begin
assign(f,fi);reset(f);
read(f,n,k);
close(f);
assign(f,fo);rewrite(f);
End;
Procedure Inkq;
var i:integer;
Duyt cc cu hnh t hp v ng dng

Trang 31

THPT CHUYN BC GIANG

Begin
d:=d+1;write(f,d:4,': ');
for i:=1 to k do write(f,' ',x[i]); writeln(f);
End;
procedure Try(i:integer);
Var j:integer;
Begin
for j:=1 to n do
if b[j] then
begin
x[i]:=j;
if i=k then Inkq
else try(i+1);
end;
End;
BEGIN
Init;
try(1);
close(f);
END.
2. Chnh hp khng lp
Pht biu: Mt chnh hp khng lp chp k ca n phn t l mt b c th t
gm k thnh phn khc nhau ly t n phn t cho (n>1, k>0, n>k).
Vd: n=3, k=2. Cc chnh hp khng lp chp 2 ca 3 phn t trn: (1,2), (1,3),
(2,1), (2,3), (3,1), (3,2)
Vd: n=4, k=3: cy lit k nh sau:

Duyt cc cu hnh t hp v ng dng

Trang 32

THPT CHUYN BC GIANG

Ta nhn thy rng, mi chnh hp khng lp cng c dng X(x1, x2xk). Cc gi


tr c ca xi (i=1..k) l t 1..n. Tuy nhin cc thnh phn l i mt khc nhau (xi
<> xj: i<>j, i,j=1..k). Do vy ta phi s dng mt bin mng B qun l cc gi tr t
1 n n. nu b[j] = true, cha xt n v ngc li.
Ci t chng trnh:
Input: tp Chklap.inp cha hai s nguyn dng n v k.
Output: tp Chklap.out nhiu dng, mi dng cha 1 s nguyn (l s tt chnh
hp lp) v 1 cu hnh chnh hp lp.
Chklap.inp Chklap.out
32

1:
2:
3:
4:
5:
6:

1
1
2
2
3
3

2
3
1
3
1
2

{CHINH HOP KHONG LAP CHAP K CUA N}


uses crt;
const MaxN=100;
fi='chklap.inp';{chua so N va K}
fo='chklap.out';{moi dong chua mot cau hinh}
var
x:array[1..MaxN] of Integer;
b:array[1..MaxN] of boolean;
n,k,d:integer;
f:text;
procedure Init;
var i:integer;
Begin
assign(f,fi);reset(f);
Duyt cc cu hnh t hp v ng dng

Trang 33

THPT CHUYN BC GIANG

read(f,n,k);
close(f);
for i:=1 to n do b[i]:=true;
assign(f,fo);rewrite(f);
End;
Procedure Inkq;
var i:integer;
Begin
d:=d+1;write(f,d:4,': ');
for i:=1 to k do write(f,' ',x[i]); writeln(f);
End;
procedure Try(i:integer);
Var j:integer;
Begin
for j:=1 to n do
if b[j] then
begin
x[i]:=j;
b[j]:=false;
if i=k then Inkq
else try(i+1);
b[j]:=true;
end;
End;
BEGIN
Init;
Try(1);
close(f);
END.

Duyt cc cu hnh t hp v ng dng

Trang 34

THPT CHUYN BC GIANG

lit k ton b chnh hp khng lp chp k, k=1..N. ca cc tp con


t 1..N th trong chng trnh chnh ta vit:
BEGIN
Init;
for k:=1 to n do Try(1);
close(f);
END.
3. Hon v
Pht biu: Lit k cc hon v ca dy s nguyn t 1..N
Vd: Xem mc 1 phn Gii thut quay lui.
Dng mng X biu din cc hon v dng x 1x2xn, trong vi mi xi c th
nhn mt trong cc gi tr t 1..N. V mi gi tr j=1..n ch xut hin mt ln trong
dy X, nn ta dng mt mng B nh du cc gi tr, bj=true nu j cha c dng.
p dng thut ton quy quay lui tm thnh phn xi nh sau:
Procedure Try(i:integer);
Var j:integer;
Begin
for j:=1 to n do {cc kh nng m xi c th nhn}
if b[j] then

{nu j cha c dng (tho P)}

begin
x[i]:=j;
if i=n then PrintResult

{tho Q}

else begin
b[j]:=false; {nh du dng}
Try(i+1);
b[j]:=true; {tr li trng thi c - gii phng}
end
end;
End;
Yu cu v d liu:
D liu vo: tp vn bn Hoanvi.inp cha s nguyn N
Duyt cc cu hnh t hp v ng dng

Trang 35

THPT CHUYN BC GIANG

Kt qu: ghi vo tp Hoanvi.out mi dng cha mt hon v


Chng trnh c vit nh sau:
Const
MaxN=100;
fi='hoanvi.inp';{chua so N}
fo='hoanvi.out';{moi dong chua mot hoan vi}
Var
x:array[1..MaxN] of integer;
b:array[1..MaxN] of boolean;
n:integer;
f:text;
procedure Init;
var

i:integer;

Begin
assign(f,fi);reset(f);
read(f,n);
for i:=1 to n do b[i]:=true;
close(f);
assign(f,fo);rewrite(f);
End;
Procedure PrintResult;
var

i:integer;

Begin
for i:=1 to n do write(f,' ',x[i]); writeln(f);
End;
procedure Try(i:integer);
Var

j:integer;

Begin
for j:=1 to n do
if b[j] then
begin
x[i]:=j;
if i=n then PrintResult
else begin
b[j]:=false;
try(i+1);
Duyt cc cu hnh t hp v ng dng

Trang 36

THPT CHUYN BC GIANG

b[j]:=true;
end
end;
End;
BEGIN
Init;
Try(1);
Close(f);
END.
4. T hp
Pht biu: Mt t hp chp k ca n phn t l mt b khng k th t gm k
thnh phn khc nhau ly t n phn t cho, hai thnh phn bt k trong b phi
khc nhau. (n>1, k>0, n>k). Ni cch khc, mt t hp chp k ca n phn t l mt
tp con k phn t ca n.
V d 7: chp 3 ca 5 phn t

S dng mng X(x1, x2xk) cha cc phn t ca mt t hp chp k ca N. Vn


l ta phi xc nh xem gi tr ca xi (i=1..n)l g v c phi dng k thut nh
du cc gi tr c la chn hay khng.

Quan st t hnh v: Xt mt nt bt k c gi tr A th cc nt tip theo thuc


nhnh tri nht s l A+1, nt phi nht ti a l N. Xt thm mt vi nhnh xem
c xc nh m gi tr tt hn N khng? T hnh v ta b sung thm phn t x0=0 l
gi tr cho nt khi u.
x0=0
i=1,xi=cc c mi(1, 2, 3), x0+1xin-k+i, chn x1=1
i=2,xi=cc c mi(2, 3, 4), x1+1xin-k+i, chn x2=2
i=3,xi=cc c mi(3, 4, 5), x2+1xin-k+i,
chn x3=3; i=k => mt t hp 1, 2, 3
chn x3=4; i=k => mt t hp 1, 2, 4

Duyt cc cu hnh t hp v ng dng

Trang 37

THPT CHUYN BC GIANG

chn x3=5; i=k => mt t hp 1, 2, 5


ht gi tr tho mn cho x3, quay lui xt li x2 v i theo hng mi.
i=2,xi=cc c cn(3,4), x1+1xin-k+i, chn x2=3
i=3,xi=cc c mi(4,5), x2+1xin-k+i,
chn x3=4; i=k => mt t hp 1, 3, 4
chn x3=5; i=k => mt t hp 1, 4, 5
ht gi tr tho mn cho x3, quay lui xt li x2 v i theo hng mi.
i=2,xi=cc c cn(4), x1+1xin-k+i, chn x2=4
i=3,xi=cc c mi(5), x2+1xin-k+i,
chn x3=5; i=k => mt t hp 1, 4, 5
ht gi tr tho mn cho x3, quay lui xt li x2; x2 ht la chn, lui tip v x1 v i
theo hng mi. (ngi c t nghin cu tip)
Ci t chng trnh:
(lit k mi cu hnh t hp chp k ca n phn t)
Mi mt t hp ta lu vo mt mng X: 1x1xkn. Suy ra gi tr c cho
xi l j=1..n hoc xt k hn s l j=xi-1+1..n-k+i (t suy ngh).

D liu vo file tohopK_N.inp: cha s nguyn N

Kt qu file tohopK_N.out mi dng cha mt t hp chp k ca N


Chng trnh lit k cc t hp chp k ca N phn t nh sau:
Const

MaxN=100;

fi='tohopK_N.inp';{chua so N}
fo='tohopK_N.out';
var
x:=array[0..MaxN] of longint;
n,k,d:integer;
f:text;
Procedure Init;
Var i:integer;
Begin
assign(f,fi);reset(f);

Duyt cc cu hnh t hp v ng dng

Trang 38

THPT CHUYN BC GIANG

read(f,n);
close(f);
assign(f,fo);rewrite(f);
x[0]:=0;
End;
Procedure PrintResult;
var i:integer;
Begin
d:=d+1;
write(f,d:4,': ');
for i:=1 to k do write(f,' ',x[i]);
writeln(f);
End;
procedure Try(i:integer);
Var j:integer;
Begin
for j:=x[i-1]+1 to n-k+i do {}
begin
x[i]:=j;
if i<k then try(i+1) else PrintResult;
end;
End;
BEGIN
Init;
for k:=1 to n do Try(1);
close(f);
END.
(Ch : Bn c hy tm hiu k cc bi ton trn trong phn ci t chng
trnh ti cc v tr c nh du nghin, m v cng c th cha nh du. V
Duyt cc cu hnh t hp v ng dng

Trang 39

THPT CHUYN BC GIANG

nu lt qua ta s thy cc bi ny na n ging nhau, nhng thc cht l khc


nhau) .
5. Bi ton dy nh phn.
Lit k cc dy nh phn di n
Minh ho bi ton trng hp n=3 di dng cy nh phn sau:

Lit k cc dy c chiu di n di dng x1,x2...xn, trong xi={0,1}. Ta c th


s dng s tm tt c cc li gii ca bi ton. Hm Try(i) xc nh x i, trong xi
ch c 1 trong 2 gi tr l 0 hay 1. Cc gi tr ny mc nhin, c chp nhn m
khng cn phi tho mn iu kin g. Nn Hm try(i) c th vit nh sau :
Procedure Try ( i);
Var I,j:integer;
Begin
for j = 0 to 1 do
begin
x[i]=j;
if (i < n ) then Try (i+1);
else PrintX;
end;
end;
Th tc PrintX: mi dy nh phn vit trn mt dng t trong tp vn bn.
Procedure PrintX;
Var i:integer;
Begin
For i:=1 to n do write(f, x[i]);
Duyt cc cu hnh t hp v ng dng

Trang 40

THPT CHUYN BC GIANG

Writeln(f);
End;
Trong li gi ca chng trnh chnh: Try(1);
6. Bi ton N qun hu.
Hng dn: xem li v d 2 phn 1
Cho bn c vua NxN, hy tm tt c cc cch t N qun hu ln bn c sao cho
khng qun no n c qun no.
Mi dng c t ng mt hu ng thi mi hu cng ch thuc v mt ct
nn ta quy nh mng mt chiu H cha v tr cc qun hu trn bn c, trong h[i]
l hu th i t hng i ct h[i] trn bn c.
Mi qun hu i c th c t trn ct j=1..n, c ngha l h[i]=j sao cho (i,j)
cha b hu no khng ch. kim sot iu ny theo lut c Hu n ngang, dc v
theo hai ng cho.
Mi hu c t trn mt hng i, nn khng cn kim tra hng. Ta s dng
mng c kim sot cc ct trn bn c, c[j]=true c ngha trn ct j cha t hu
no. Cc nm trn cng mt ng cho song song vi ng cho ph, u c
i+j=C1 (hng s) vi 2<=C1<=2n. Cc cng nm trn ng cho song song vi
ng ho chnh li c i-j=C2 vi 1n<=C1<=n-1. do vy kim sot 2 ng cho
ta dng 2 bin c1[i+j]=true, c2[i-j]=true nu (i,j) cha b hu no khng ch theo
ng cho.

Tm li nu c[i]=c1[i+j]=c2[i-j]=true th c th t hu i vo ct j.
D liu: Hau.inp cha kch thc bn c s nguyn n
Kt qu: Hau.out cc v tr hu trn tng bn c.
{Chng trnh xp n hu}
const MaxN=10;
Duyt cc cu hnh t hp v ng dng

Trang 41

THPT CHUYN BC GIANG

fi='hau.inp';{chua so N}
fo='hau.out';
var
h:array[1..MaxN] of integer;
c:array[1..MaxN] of boolean;
c1:array[2..2*MaxN] of boolean;
c2:array[1-MaxN..MaxN+1] of boolean;
n:integer;
f:text;
procedure Init;
var i,j:integer;
Begin
assign(f,fi);reset(f);
read(f,n);
for i:=1 to n do c[i]:=true;
for i:=2 to 2*n do c1[i]:=true;
for i:=1-n to n+1 do c2[i]:=true;
close(f);
assign(f,fo);rewrite(f);
End;
Procedure PrintResult;
var i,j:integer;
Begin
writeln(f,'==========');
for i:=1 to n do begin
for j:=1 to n do if h[i]=j then write(f,'H') else write(f,'O');
writeln(f);
end;
writeln(f);
End;
Duyt cc cu hnh t hp v ng dng

Trang 42

THPT CHUYN BC GIANG

procedure Try(i:integer);
Var j,k:integer;
Begin
for j:=1 to n do
if c[j] and c1[i+j] and c2[i-j] then
begin
h[i]:=j;
if i=n then PrintResult
else begin
c[j]:=false;c1[i+j]:=false;c2[i-j]:=false;
Try(i+1);
c[j]:=true;c1[i+j]:=true;c2[i-j]:=true;
end;
end;
End;
BEGIN
Init;
Try(1);
close(f);
END.
vi n=4, kt qu tp hau.out nh sau:
==========
OHOO
OOOH
HOOO
OOHO
==========
OOHO
HOOO
OOOH
Duyt cc cu hnh t hp v ng dng

Trang 43

THPT CHUYN BC GIANG

OHOO
7. Bi ton Nga i tun
Pht biu bi ton
Cho bn c c n x n . Mt con nga c php i theo lut c vua, u
tin c t c ta x0 , y0 . Hy ch ra cc hnh trnh (nu c) ca nga
l nga i qua tt c cc ca bn c, mi i qua ng mt ln .
Thit k thut ton
Cch gii quyt r rng l xt xem c th thc hin mt nc i k na hay
khng. S u tin c th pht tho nh sau :
Procedure Try(i);
Begin
for ( j = 1 k)
If ( xi chp nhn c kh nng k)
begin
Xc nh xi theo kh nng k;
Ghi nhn trng thi mi;
if( i < n2 ) Try(i+1)
else Ghi nhn nghim;
r li trng thi c cho bi ton;
end;
End;
m t chi tit thut ton, ta phi qui nh cch m t d liu v cc thao tc,
l :
Biu din bn c .
Cc kh nng ch la cho xi ?
Cch thc xc nh xi theo j.
Cch thc gi nhn trng thi mi, tr v trng thi c.
Ghi nhn nghim.
. . .
Ta s biu din bn c bng 1 ma trn vung cp n : int Ma[n][n];

Duyt cc cu hnh t hp v ng dng

Trang 44

THPT CHUYN BC GIANG

S d th hin mi c bng 1 s nguyn thay cho gi tr boole ( nh


du c i qua cha) l v ta mun ln d theo qu trnh di chuyn ca con
nga.
Ta qui c nh sau :
Ma[x,y] = 0, <x,y> nga cha i qua;
Ma[x,y] = i, <x,y> nga i qua bc th i (1 i n2 ).
Cc kh nng chn la cho xi ? chnh l cc nc i ca nga m xi c th
chp nhn c. Vi cp ta bt u <x,y> nh trong hnh v, c tt c 8
<u,v> m con nga c th i n. Gi s chng c nh s t 1 n 8 nh hnh
sau :

( 8 bc i c th c ca con nga )
Mt phng php n gin c c u, v t x, y l ta dng 2 mng a v b lu
tr cc sai bit v ta .Nu ta dng mt ch s k nh s bc i k th chi
tit c th hin bi : u = x +a[k]; v = y + b[k]; k=0..7 .
iu kin chp nhn c c th c biu din nh kt hp ca cc iu kin
:
mi phi thuc bn c (1u n v
Ma[u,v] = 0;

1 vn) v cha i qua , ngha l

ghi nhn nc i hp l bc i, ta gn Ma[u][v] = i; v hy mt nc i


th ta gn Ma[u][v] = 0.
Ma trn h ghi nhn kt qu nghim. Nu c <x,y> sao cho Ma<x,y> = 0 th
khng phi l li gii ca bi ton , cn ngc l Ma cha ng i ca nga.
Vy thut ton c th m t nh sau :
Input

n, //Kch thc bn c x, y;//To xut pht bc i

Output Ma;
Procedure Try(i, x, y:integer);
Duyt cc cu hnh t hp v ng dng

Trang 45

THPT CHUYN BC GIANG

Var u,v,k:integer;
Begin
For k = 1 to 8 do
Begin
u = x + a[k];
v = y + b[k];
if (1 <= u )and(v <= n)and(Ma[u][v] == 0) then
begin
Ma[u][v] = i;
if (i <= n*n) then Try(i+1,u,v)
else PrintH();
end;
Ma[u][v] = 0;
End;
End;
Th tc ny xut tt c cc li gii, nu c.
Th tc qui c khi ng bng mt lnh gi cc ta u [x0][y0] l tham
s. xut pht c tr 1, cn cc khc c nh du cn trng.
Ma[x0][y0] = 1; Try(2,x0, y0);
Cc mng a v b c th khi u nh sau :
int a[8]= {2,1,-1,-2,-2,-1,1,2};
int b[8]= {1,2,2,1,-1,-2,-2,-1};
Cc li gii sau l mt s kt qu cho t thut ton trn :
n=5 x=1 y=1
1
6
15 10 21
14 9
20 5
16
19 2
7
22 11
8
13 24 17 4
25 18 3
12 23
Vi n = 5, cc ta xut pht sau khng c li gii : (2,3), (3,2)...
Ci t chng trnh
{Duong di cua QuanMa tren ban co vua, moi o di qua 1 lan}
Duyt cc cu hnh t hp v ng dng

Trang 46

THPT CHUYN BC GIANG

Usescrt;
Const MaxN=10;
fi='quanma.inp';{n/x y}
fo='quanma.out';
a:array[1..8] of integer=(2,1,-1,-2,-2,-1,1,2);
b:array[1..8] of integer=(1,2,2,1,-1,-2,-2,-1);
Var
n,d,x,y,u,v:integer;
ma:array[1..MaxN,1..MaxN] of integer;{thu tu quan ma}
f:text;
Procedure Init;
Var i,j:integer;
Begin
assign(f,fi);reset(f);
readln(f,n); read(f,x);read(f,y);
for i:=1 to n do for j:=1 to n do ma[i,j]:=0;
ma[x,y]:=1;
close(f);
assign(f,fo);rewrite(f);d:=0;
End;
Procedure PrintResult;
Var i,j:integer;
Begin
d:=d+1;
writeln(f,'=====',d,'=====');
for i:=1 to n do begin
for j:=1 to n do write(f,ma[i,j]:2,'.');
writeln(f);
end;
writeln(f);
Duyt cc cu hnh t hp v ng dng

Trang 47

THPT CHUYN BC GIANG

End;
Procedure Try(i:integer;x,y:integer);
Var j,k,u,v:integer;
Begin
for j:=1 to 8 do
begin
u:=x+a[j];
v:=y+b[j];
if (ma[u,v]=0)and(u>=1)and(u<=n)and(v>=1)and(v<=n) then
begin
ma[u,v]:=i;
if i=n*n then PrintResult
else Try(i+1,u,v);
ma[u,v]:=0;
end;
end;
End;
BEGIN
Init;
Try(2,x,y);
Close(f);
END.
8. M cung (later)

Quay lui l ban u ta tin, tin v tin cho n khi khng tin c na th
lui v lui cho n khi c ng i mi, ta li tin v tin li lui, lui cho n khi ht
ng lui. Ht vic!

Duyt cc cu hnh t hp v ng dng

Trang 48

THPT CHUYN BC GIANG

- Ti liu tham kho.


a.

Thy nguyn Thanh Tng tm tt v TM KIM QUAY LUI.

Tm kim quay lui (Backtraking) l phng php tm kim li gii trn cy


phng n. Phng php ny c s dng ch yu tm mt li gii tha mn mt
s yu cu no theo nguyn tc m rng dn dn li gii.
Cc bi ton in hnh:
M i tun: Tm ng i ca qun m trn trn bn c kch thc N N, sao
cho mi trn bn c (tr xut pht) c i qua ng mt ln v tr v xut
pht,
t qun hu: t tti a s qun hu trn bn c N N, sao cho khng c hai
qun hu no v tr n nhau,
Bi ton ngi bn hng rong: Tm ng i khp kn ngn nht qua mi nh
ca th ng mt ln,
Xu khng lp: Vi M k t khc nhau hy tm xu c di N, sao cho mi
xu con L k t lin tip u khc nhau,
Xu phn i xng: Vi M k t khc nhau hy tm xu c di N, sao cho
nu ly xu con bt k cc k t lin tip nhau v chia n thnh hai xu con lin tip
nhau, th hai xu con mi ny khc nhau vi mi cch chia,
Thot khi m cung: iu khin r bt tm ng ra khi m cung.
Nguyn tc c bn ca phng php tm kim quay lui l nh sau:
Chia tp tm kim thnh nhiu tp con,
nh s cc tp con theo mt tiu chun no c cc tp P1, P2, . . ., Pk,

P
P1
P11

P2

P3

P14
P12

Vi mi tp con nhn c: xc nh mt trong s cc kh nng:


Khng cn xt tip tp ny,

Duyt cc cu hnh t hp v ng dng

Trang 49

THPT CHUYN BC GIANG

Bi ton tr nn qu n gin v tm c mt li gii,


Qay li bc a) vi tp con ny.
Tiu chun phn chia tp con: tha mn mt trong s cc tnh cht:
Nhn c bi ton ging nh ban u, nhng c kch thc b hn,
Nhn c bi ton n gin hn,
Nhn c bi ton vi mt s tnh cht mi khng c trong bi ton ban u.
Tiu chun nh s cc tp con:
Theo th t t in ca mt cu trc d liu,
Theo kh nng, trin vng tn ti nghim.
Tm kim quay lui v bn cht gn ging cc gii thut quy, nhng c mt s
khc bit c bn:
Ngi lp trnh iu khin c qu trnh duyt theo cc hng c trin vng,
Khng cn lu ton b cc nt r nhnh trong tm kim,
C th d dng ngt v quay lui khi cn thit.
Chnh v nhng c im trn nn gii thut ny thng p dng gii cc bi
ton theo phng php nhnh v cn.
Cc m un c bn:
Khi to tm kim quay lui: init,
M rng li gii : Extend,
Chuyn sang tp mi: Change,
Kim tra tnh hp l ca li gii : Check.
S chung :
init ;
repeat
Extend ;
Check ;
While not ok do
begin
change;
check

Duyt cc cu hnh t hp v ng dng

Trang 50

THPT CHUYN BC GIANG

end;
until kt;
2. Cc tc gi khc

Nguyn c Ngha, Nguyn T Thnh. Ton ri rc, NXB HQGHN, 2003

ThS.Trn c Huyn. Phng php gii cc bi ton trong Tin hc. NXBGD.
2004.

Nguyn Xun Huy. Sng to trong thut ton v lp trng. NXBGD. 2007.

L Minh Hong. Gii thut v lp trnh A.D.A DSAP Textbook, DHSPHN,


1999-2002. <Internet>

Trn Tun Minh. Thit k v nh gi thut ton. lt. <Internet>

L Minh Hong. Bi ging cc chuyn .

Duyt cc cu hnh t hp v ng dng

Trang 51

THPT CHUYN BC GIANG

PHN IV. NG DNG


I. KHI NIM BI TON TI U.
1. Mt s khi nim
* Pht biu bi ton: C nhiu bi ton m vic gii n a v vic duyt cc
cu hnh t hp tho mn cc iu kin no . Vi mi cu hnh t hp, ta s tnh
ton theo mt cch no (tu theo yu cu ca bi ton) c mt gi tr bng s.
Gi tr th hin gi tr s dng ca cu hnh (gi l gi ca cu hnh hay gi ca
phng n).
* Bi ton t ra: Trong s cc cu hnh t hp chp nhn c, hy la chn
mt cu hnh c gi tr s dng tt nht (ln nht hoc nh nht
Cc bi ton nh vy gi l bi ton ti u t hp.
a. Phng n v gi ca phng n
Mi cu hnh t hp gi l mt phng n ca bi ton (hay cn gi l mt li
gii ca bi ton). Vi mi phng n ca bi ton ta tnh ton c mt con s gi l
gi ca phng n.
b. Hm mc tiu ca bi ton
Nu ta gi tp cc phng n ca bi ton l D.
Khi , vi mi phng n x thuc D cho chng ta mt gi tr s duy nht tng
ng vi n. Do xc nh mt hm s:
f:DR
x y=f(x)
Hm f(x) nh vy gi l hm mc tiu ca bi ton
Vy: Bi ton ti u t hp l bi ton: Tm Max{f(x)| xD} hoc Tm
Min{f(x)| |xD}, vi D l tp cc phng n ca bi ton.
c. Gi tr ti u v phng n ti u
Mt phng n x*D m ti f(x*) t gi tr min hoc max gi l phng n
ti u ca bi ton.
Gi tr f(x*) gi l gi tr ti u ca bi ton. Nh vy:
Vi bi ton tm max th: f(x*) ln hn hoc bng f(x) vi mi x thuc D;
Vi bi ton tm min th: f(x*) nh hn hoc bng f(x) vi mi x thuc D;
Ch :
Duyt cc cu hnh t hp v ng dng

Trang 52

THPT CHUYN BC GIANG

Gi tr ti u ca bi ton l duy nht.


Phng n ti u ca bi ton c th c nhiu
d. Cc v d
V d 1: Bi ton ci ti
Mt nh thm him cn em theo mt ci ti c trng lng khng qu b. C n
vt cn em theo. vt th j c trng lng l aj v gi tr s dng l cj (j = 1, 2,
3, ..,n). Hi rng nh thm him cn em theo cc vt no cho tng gi tr s
dng ca cc vt em theo l ln nht?
D liu: Vo t file vn bn CAITUI.INP:
Dng u ghi 2 s nguyn dng n v b (n < 100).
Dng th hai ghi cc s nguyn khng m a1, a2, .. ,an.
Dng th ba ghi cc s nguyn khng m c1, c2, .. ,cn.
Kt qu: Ghi ra file CAITUI.OUT:
Dng u ghi tng gi tr cc vt em theo ng vi phng n tm c.
Ghi ch s ca cc vt em theo
V d:
CAITUI.INP

CAITUI.OUT

15

10

Phn tch:

Mi vt ch c 2 kh nng la chn (2 trng thi) l: c chn vo ti


mang i hoc khng c chn vo ti mang i.
Do , mi phng n chn vt mang theo ca nh thm him l mt b
x=(x1,x2,,xn), trong xi = 0 hoc 1, i=1,2,,n; Vi ngha xi = 0 tng ng
vi vic vt i khng c chn vo ti, cn xi = 1 tng ng vi vic vt i
c chn vo ti.
Nh vy, mi phng n la chn cc vt l mt chnh hp lp chp n ca 2
phn t {0,1} (hay mt dy nh phn di n).
iu kin chp nhn ca phng n x l tng khi lng cc vt c chn
n

nh hn hoc bng b, tc l: g(x) =

Duyt cc cu hnh t hp v ng dng

a
i =1

* xi < b

Trang 53

THPT CHUYN BC GIANG

Gi ca phng n x bng: f(x) =

c
i =1

* xi

Kt lun:
Bi ton ci ti l mt bi ton ti u t hp: Tm Max{f(x)| xD}, vi D={x|
x=(x1,x2,,xn), xi = 0 hoc 1, i=1,2,,n; v g(x) < b}
V d 2: Bi ton thu th
C n cng vic c nh s t 1 n n v c n th c nh s t 1 n n.
Mi cng vic i bit chi ph cn tr th j hon thnh cng vic ny l c[i,j],
vi i,j = 1,2,3,..,n.
Yu cu: Hy tm phng n thu th vi tng chi ph phi tr l nh nht sao
cho cc cng vic u hon thnh, bit rng mi th ch thc hin mt cng vic v
mi vic ch do mt th thc hin.
D liu: Vo t file vn bn THUETHO.INP c dng
Dng u ghi s n. (N <= 100)
n dng tip theo, mi dng i ghi n s c[i,j], j = 1,2,n tng ng l chi ph
cn tr th j hon thnh cng vic i (i = 1,2,,n).
Kt qu: Ghi ra file vn bn THUETHO.OUT gm:
Dng u ghi tng chi ph thu th.
Dng th 2 ghi n s, trong s th i (i=1,2,..n) l s hiu ca th thc hin
cng vic i.
V d:
THUETHO.INP
5
4
8 17
19
12 6 17
19
8
19 19 7
17 9
17 3
7
16 12 16

THUETHO.OUT
32
1 2 5 4 3

7
10
7
7
8

*Phn tch:

Mi phng n thu th l mt hon v ca n phn t {1,2, ...,n}. K hiu


x={x1,x2, ...,xn} trong xi = j ngha l vic i thu th j; i=1,2,..,n; j {1,2, ...,n}.

Tp cc phng n: D = {x| x = {x1,x2, ...,xn}, xi {1,2, ...,n}, i=1,2,..,n v


xi<>xj nu i<>j }

Gi ca phng n: f(x) =

C[i, xi]
i

Duyt cc cu hnh t hp v ng dng

Trang 54

THPT CHUYN BC GIANG

Bi ton a v bi ton ti u t hp: Tm Min{f(x)| x D}


- Mt s phng php gii bi ton ti u t hp
* Phng php duyt
Dng kin thc ton hc bit, dng suy lun, nh gi
a ra c phng n ti u.
* Phng php nh gi nhnh cn
* Cp ghp
....

Duyt cc cu hnh t hp v ng dng

Trang 55

THPT CHUYN BC GIANG

II.

PHNG PHP DUYT GII BI TON TI U

1. T tng ch o
Ln lt duyt cc cu hnh ca bi ton. i vi mi cu hnh tho mn iu
kin ca bi ton (mi phng n ca bi ton) ta i tnh gi ca phng n . So
snh gi ca tt c cc phng n vi nhau tm ra phng n ti u v gi tr ti
u.
Trong qu trnh duyt ta lun gi li phng n tt hn. Phng n tt nht cho
n thi im ang duyt gi l phng n mu. Gi tr ca phng n mu gi l k
lc tm thi.
Khi duyt xong tt c cc phng n th s tm c phng n ti u v gi tr
ti u. Tuy nhin, trn thc t vi nhng bi ton c kch thc ln (s phng n
nhiu) th thi gian duyt lu dn n khng kh thi. Do , trong qu trnh duyt ta
nn hn ch bt php duyt (khng duyt cc phng n m ta bit chc chn rng
phng n khng th l phng n ti u ca bi ton).
C hai cch duyt:
Duyt ton b (vt cn)
Duyt hn ch (phng php duyt c nh gi nhnh cn)
- Cu trc ca phng php duyt tng qut
*Pht biu bi ton ti u t hp bng cch khc:
Tm MAX{f(x), x thuc D} hoc Tm MIN{f(x), x thuc D}
trong :
+) D = {x| x=(x1,x2, ..., xn) A1 A2 ... An ; x tho mn tnh cht P}
+) A1 , A2 ,... ,An l cc tp hu hn phn t.
+) Ai l tp gm cc kh nng c cho thnh phn xi
* Phng php duyt vit di dng m hnh quay lui c cu trc tng qut
nh sau:
Procedure

Khito;

begin
c d liu vo
Khi to cc gi tr ban u cho cc bin
end;
Duyt cc cu hnh t hp v ng dng

Trang 56

THPT CHUYN BC GIANG

{}
Procedure Cp Nht K Lc;
begin
- <Tnh gi phng n nu cha tnh>
- Nu gi p/n > k lc (hocp/n > k lc) th
begin
k lc := gi p/n;
gi li p/n;
end;
end;
Procedure

Try(k : integer);

begin
for ak Ak do
if <chp nhn ak> then
begin
xk := ak;
<Tnh gi ca phng n b phn cp k;>
<Xc nh trng thi mi ca bi ton nu cn>
if k = n then Cp Nht K Lc
else try(k+1);
<Hon nguyn trng thi ca bi ton nu cn>
end;
end;
Procedure

Inkq;

begin
<in k lc v phng n ti u>
end;
BEGIN
Khito;
Try(1);
Duyt cc cu hnh t hp v ng dng

Trang 57

THPT CHUYN BC GIANG

inkq;
END.
III.

BI TP P DNG
Bi 1: Cn thng bng

C mt ci cn a (cn thng bng) v n qu cn trng lng khc nhau (cc


qu cn c nh s t 1 n n). Qu cn s hiu i c trng lng ai. Ngi ta mun
cn mt vt c trng lng p. Hy tm cch t vt v cc qu cn ln a cn
thng bng sao cho s qu cn phi dng l t nht.
D liu:Vo t file CAN.INP gm 3 dng:
Dng u ghi s n.
Dng th 2 ghi cc s a1, a2, ,an.
Dng cui cng ghi gi tr p. Cc s ai v p l nguyn dng. Gii hn n < 30,
a1 + a2 + +an < 32767
Kt qu: Ghi ra file CAN.OUT
Nu khng c phng n t th ghi s -1 ti dng u tin, tri li kt qu ghi
trn 2 dng.
Dng u gm: s qu cn t cng trn mt a vi vt, tip theo l s hiu
ca cc qu cn ny.
Dng th 2 gm: s qu cn t trn a cn li, tip theo l s hiu ca cc
qu cn ny.
Trong cc tp d liu cc s trn cng mt dng ghi cch nhau bi du cch.
V d:
CAN.INP
10
27 10 73 95 60 55 87 77 75
131

CAN.OUT
2 2 3
2 4 5

*Phn tch thut ton:


Mi qu cn c 3 kh nng la chn (hay cn gi l c 3 trng thi) c k hiu
l 0,1,2, l: khng t vo a no (0), t a c vt (1), t a khng c vt
(2);
Mi phng n (mi cu hnh) ca bi ton l b: x[1], x[2], , x[n] trong
x[i] l kh nng la chn ca qu cn i: x[i] = 0,1,2 (i=1..n).

Duyt cc cu hnh t hp v ng dng

Trang 58

THPT CHUYN BC GIANG

Bi ton a v duyt cc chnh hp lp chp n ca 3 phn t {0,1,2}, tnh gi


ca tng phng n v cp nht k lc gi li phng n tt nht.
tng hiu qu trong vic duyt trc ht ta sp xp cc qu cn gim dn theo
trng lng v th t c cho mi thnh phn x[i] l 0, 1, 2.
Cch 1: Khng dng thm tham s trong th tc Try
{ chay cham ,n < 50}
Program CanThangBang;
uses crt;
const
fi ='can.inp';
fo ='can.out';
maxn=300;
var a,a1 :array[1..maxn] of integer;
kqx1,kqx2,x1,x2 :array[1..maxn] of integer;
tongtua :array[1..maxn] of longint;
{tongtua[i] := a[i+1] + a[i+2] + + a[n]}
n, p
:integer;
le, ri
:longint;
{tng khi lng cc qu cn c t vo a cha vt v a khng cha vt
ca phng n b phn, ban u le := p; ri :=0}
min,t,d,d1,d2,kqd1,kqd2 :integer;
f:text;
cs
:array[1..maxn] of integer;
Procedure init;
var i:integer;
Begin
assign(f,fi); reset(f);
readln(f,n);
for i:=1 to n do read(f,a[i]);
a1:=a;
readln(f,p);
close(f);
le := p;
ri := 0;
min := maxint;
d1 := 0;
d2 := 0;
tongtua[n]:=a[n];
for i:=n-1 downto 1 do tongtua[i]:=tongtua[i+1]+a[i];
end;
Duyt cc cu hnh t hp v ng dng

Trang 59

THPT CHUYN BC GIANG

{------------------------------*****---------------------------}
procedure Sort;
var i,j,tg: integer;
begin
for i:=1 to n do cs[i]:=i;
for i:=1 to n-1 do
for j:=i+1 to n do
if a[j]>a[i] then
begin
tg:=a[i];a[i]:=a[j];a[j]:=tg;
tg:=cs[i];cs[i]:=cs[j];cs[j]:=tg;
end;
tongtua[n]:=a[n];
for i:=n-1 downto 1 do tongtua[i]:=tongtua[i+1]+a[i];
end;
Procedure cnkl;
Begin
if d < min then
Begin
min := d;
kqd1 := d1;
kqd2 := d2;
kqx1 := x1;
kqx2 := x2;
End;
End;
Procedure try(i:integer);
var j:integer;
Begin
for j:=0 to 2 do
Begin
if j=1 then
Begin
inc(d1);
x1[d1] := i;
le :=le + a[i];
End;
if j=2 then
Begin
inc(d2);
x2[d2] := i;
Duyt cc cu hnh t hp v ng dng

Trang 60

THPT CHUYN BC GIANG

ri := ri + a[i];
End;
d:=d1+d2;
if i=n then Begin if le=ri then cnkl; End
else if (d < min) and (abs(le - ri) <= tongtua[i + 1]) then try(i + 1);
if j=1 then
Begin
dec(d1);
le := le - a[i];
End;
if j=2 then
Begin
dec(d2);
ri := ri - a[i];
End;
d := d1 + d2;
end;
End;
Procedure result;
var i:integer;
Begin
assign(f,fo); rewrite(f);
write(f,kqd1,' ');
for i:=1 to kqd1 do write(f,cs[kqx1[i]],' ');
writeln(f);
write(f,kqd2,' ');
for i:=1 to kqd2 do write(f,cs[kqx2[i]],' ');
close(f);
End;
BEGIN
init;
sort;
try(1);
result;
END.
Cch 2: Dng thm tham s trong th tc Try
Mi qu cn c 3 kh nng la chn (hay cn gi l c 3 trng thi) c k hiu
l 1,0,-1, l: t a c vt (1), khng t vo a no (0), t a khng c vt
(-1);

Duyt cc cu hnh t hp v ng dng

Trang 61

THPT CHUYN BC GIANG

Mi phng n (mi cu hnh) ca bi ton l b: x[1], x[2], , x[n] trong


x[i] l kh nng la chn ca qu cn i: x[i] = -1,0,1 (i=1..n).
Trong th tc Try: S l khi lng chnh lch gia hai a cn bc i-1 truyn
li cho bc th i, sau c tnh li khi chn xong bc i v truyn li cho
bc i+1
program CanThangBang;
uses crt;
const fin='Can.inp';
fout='Can.out';
maxn=70;
var a,cs
: array[1..maxn] of integer;
x,kqx : array[1..maxn] of integer;
ts
: array[1..maxn] of longint;{tng sau ts[i]:=a[i+1]+a[i+2]++a[n]}
n,d,t : integer;
min,kqi : integer;
f
: text;
p,s:longint;
{s l chnh lch khi lng gi hai a cn, c khi to ban u l p}
{d l s qu cn c chn t ln a}
procedure Init;
var i: integer;
begin
assign(f,fin);reset(f);
readln(f,n);
for i:=1 to n do read(f,a[i]);
readln(f);
readln(f,p);
close(f);
min:=maxint;
s:=p;
d:=0;
t:=0;
end;
procedure Sort;
var i,j,tg: integer;
begin
for i:=1 to n do cs[i]:=i;
for i:=1 to n-1 do
for j:=i+1 to n do
if a[j]>a[i] then
Duyt cc cu hnh t hp v ng dng

Trang 62

THPT CHUYN BC GIANG

begin
tg:=a[i];a[i]:=a[j];a[j]:=tg;
tg:=cs[i];cs[i]:=cs[j];cs[j]:=tg;
end;
ts[n]:=0;
for i:=n-1 downto 1 do ts[i]:=a[i+1]+ts[i+1];
end;
Procedure Try(i,s,d: integer);
{d l s qu cn dng n bc i-1 truyn li cho bc i}
var j: integer;
begin
for j:=1 downto -1 do
if d+abs(j)<min then {c th nh gi ngay ti y: nu thm 1 qu cn na
t vo a m khng tt hn k lc ca phng n mu th khng xy dng tip pa}
begin
t:=s-j*a[i];
if abs(t)<=ts[i] then { lch phi < tng cc qu cn cha chn}
begin
x[i]:=j;
if t=0 then
if d+abs(j)<min then
begin
min:=d+abs(j);
kqi:=i;
kqx:=x;
exit;
end;
if i<n then Try(i+1,t,d+abs(j));
end;
end;
end;
procedure Result;
var c1,c2,i: integer;
begin
assign(f,fout);rewrite(f);
if min=maxint then writeln(f,-1)
else
begin
c1:=0;c2:=0;
for i:=1 to kqi do
begin
Duyt cc cu hnh t hp v ng dng

Trang 63

THPT CHUYN BC GIANG

if kqx[i]=-1 then inc(c1);


if kqx[i]=1 then inc(c2);
end;
write(f,c1,' ');
for i:=1 to kqi do if kqx[i]=-1 then write(f,cs[i],' ');
writeln(f);
write(f,c2,' ');
for i:=1 to n do if kqx[i]=1 then write(f,cs[i],' ');
end;
close(f);
end;
BEGIN
Init;
Sort;
Try(1,p,0);
Result;
END.
Bi 2 : Lp lch u tin ng hn.
C n cng vic c nh s t 1 n n v c mt my thc hin chng. Bit:
+ pi l thi gian cn thit hon thnh cng vic i.
+ di l thi hn hon thnh cng vic i.
Mi cng vic cn c thc hin lin tc t lc bt u cho ti khi kt thc,
khng cho php ngt qung. Khong thi gian thc hin hai cng vic bt k ch c
c nhiu nht 1 im chung. Thi im bt u thc hin n cng vic tnh t 0. Gi s
ci l thi im hon thnh cng vic i. Khi , nu ci > di ta ni cng vic i b hon
thnh tr hn, cn nu nu ci < di ta ni cng vic i b hon thnh ng hn.
Yu cu: Tm trnh t thc hin cc cng vic sao cho s cng vic c hon
thnh ng hn l ln nht.
D liu: Vo t file vn bn LIC* HDH.INP:
+ Dng u tin cha s nguyn dng n (0 < n < 100).
+ Dng th 2 cha n s nguyn dng p1, p2, , pn.
+ Dng th 3 cha n s nguyn dng d1, d2, , dn.
Kt qu: Ghi ra file LIC* HDH.OUT gm:
+ Dng u tin ghi s lng cng vic c hon thnh ng hn theo
trnh t tm c.
+ Dng tip theo ghi trnh t thc hin cc cng vic cho.
Duyt cc cu hnh t hp v ng dng

Trang 64

THPT CHUYN BC GIANG

V d:
LIC* HDH.INP

LIC* HDH.OUT

4 1 2 3 1

1 3 4 6 2 5

5 6 6 7 8
*Phn tch thut ton:
- Mt trnh t thc hin cc cng vic (mt phng n ca bi ton) l mt hon
v ca n phn t {1, 2, , n}.
C th: mi phng n l 1 b x = (x1, x2, ,xn); trong xi {1, 2, , n}, xi
<> xj nu i<>j;
- Gi ca phng n x (s cng vic ng hn) bng: f(x) = k
i
p < di vi mi i = 1,2, , k

Vi iu kin g(x) =
i
i =1
Bi ton lp lch ng hn a v bi ton: Tm Max{f(x)| xD},
vi D={x|x=(x1,x2,,xn), xi {1, 2, , n}, xi <> xj nu i<>j; v g(x) < di}
Vn bn chng trnh:
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);
Duyt cc cu hnh t hp v ng dng

Trang 65

THPT CHUYN BC GIANG

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;
cx[j]:=false;
tg := tg + p[j];
if (tg <= d[j]) then inc(count);
if (i = n) then
begin
if count>max then
begin
max:=count;
kqx:=x;
end;
end
else if count+n-i>max then Try(i+1);
if tg <= d[j] then dec(count);
tg := tg - p[j];
cx[j]:=true;
end;
end;
end;
{---------------------------------------------------------}
procedure Result;
var i: integer;
j: integer;
begin
assign(f,fout);rewrite(f);
writeln(f,max);
for i:=1 to n do write(f,kqx[i],' ');
close(f);
end;
{----------------------------------------------------------}
Duyt cc cu hnh t hp v ng dng

Trang 66

THPT CHUYN BC GIANG

BEGIN
Init;
Try(1);
Result;
END.
Bi 4 : Truyn tin
Ngi ta cn truyn n gi tin c nh s t 1 n n t mt im pht n mt
im thu. thc hin vic truyn tin c th s dng m ng truyn c nh s
t 1 n m. Bit rng nu truyn j gi tin theo ng truyn tin i th chi ph phi tr l
sij (sij l s nguyn dng, sij < 32767, i =1,2,..,m, j = 1,2,,n).
Yu cu: Hy xc nh s lng gi tin cn truyn theo mi ng truyn tin
vic truyn n gi tin c thc hin vi tng chi ph phi tr l nh nht.
D liu: Vo t file vn bn TTIN1.INP:
+ Dng u tin cha hai s nguyn dng n v m (n,m < 100) .
+ Dng th i trong s m dng tip theo cha n s nguyn dng si1, si2, .., sin ,
i=1,2,,m.
Kt qu: a ra file vn bn TTIN1.OUT:
+ Dng u tin cha S l tng chi ph phi tr theo cch truyn tin tm c.
+ Dng th hai cha m s nguyn khng m q1, q2, .. ,qm, trong qi l s gi tin
cn truyn theo ng truyn tin i.
V d:
TTIN1.INP

TTIN1.OUT

3 3

20

20 20

10

20

Bi 5 : Thu my
Mt trung tm c n my tnh (cu hnh ging nhau) dng cho thu trong thng
(t ngy 1 n ngy 31), thi gian thu tnh theo n v ngy. u thng, trung tm
nhn c yu cu ca m khch hng (nh s t 1 n m), mi khch hng cn thu
mt my trong mt s ngy no y thuc thng. Gi thit rng, i vi mi khch
hng, hoc trung tm t chi, hoc trung tm ng cho thu theo ng nh yu cu
ca khch. Vi mi ngy, gi tn s s dng my l s my tnh c s dng trong
Duyt cc cu hnh t hp v ng dng

Trang 67

THPT CHUYN BC GIANG

ngy . Hy lp mt phng n cho thu my tng tn s s dng my trong


thng l ln nht.
D liu: Vo t file vn bn THUEMAY.INP gm:
+ Dng u ghi cc gi tr n, m.
+ m dng tip theo, theo th t 1, 2,,m, mi dng ghi yu cu ca mt khch:
bt u l s ngy m khch cn thu, tip theo l cc ngy trong thng m khch cn
thu. Cc gi tr trn cng mt dng ghi cch nhau t nht mt du trng.
Kt qu: a ra file vn bn THUEMAY.OUT:
+ Dng u ghi s khch c thu.
+ Dng tip theo ghi cc s hiu khch c thu, cc s hiu ny phn cch
nhau t nht mt du trng.
+ Dng cui ghi tng tn s s dng my.
Hn ch kch thc: s my, s khch khng vt qu 30
V d:
THUEMAY.INP
3 10
5 1 3 4 6 7
1 1
2 3 6
3 2 4 5
6 1 2
3 4 5 6
2 2 3
5 1 3 4 6 7
5 2 4 5 6 7
4 1 2 4 5
3 3 5
6

THUEMAY.OUT
6
1 2 6 8 9 10
20

Bi 6 : Dy s
Cho dy s gm n s nguyn dng a1, a2, , an (n < 1000) v s nguyn dng
k (k < 50).
Yu cu: Tm dy con nhiu phn t nht ca dy cho v c tng cc phn t
chia ht cho k.
D liu: Vo t file vn bn DAYSO.INP gm:
+ Dng u tin cha hai s n, k c ghi cch nhau bi t nht mt du trng.
+ Cc dng tip theo cha cc s a1, a2, ,an c ghi cch nhau t nht mt du
trng hoc du xung dng.
Kt qu: Ghi ra file vn bn DAYSO.OUT
Duyt cc cu hnh t hp v ng dng

Trang 68

THPT CHUYN BC GIANG

+ Dng u tin ghi m l s phn t ca dy con tm c.


+ Cc dng tip theo ghi dy m ch s cc phn t ca dy cho c mt trong
dy con tm c. Cc ch s c ghi cch nhau t nht mt du trng hoc xung
dng.
V d:
DAYCON.INP
10 3
2
3
5
7
9
6 12 7
11 15

DAYCON.OUT
9
1
3
2
4
6
7
10
8

* Phn tch thut ton: Chia tng s hng ca dy cho k tm s d, tnh tng
cc s d. Sau tnh r := tngd mod k;
+ Nu r = 0 th kt lun ly c c dy
+ Ngc li: nu tm trong dy c 1 s chia cho k d r th ch cn loi s v
dy cn tm gm n-1 s cn li;
Nu khng ri vo 2 trng hp trn th th ta i tm cch loi i t nht cc
phn t tng cc s cn li chia ht cho k:

Trc ht ta i tm s lng tng loi s d: SLDU[i] = j ngha l cc s


chia cho k d i c j s (i=0,1,2, ,k-1)

Mi cch loi cc phn t c xc nh bi 1 b: x[1], x[2], , x[n], trong


x[i]=j, ngha l cc s chia cho k d i cn loi i j s sao cho tng cc s cn
li chia ht cho k.

R rng khi i xy dng cc x[i] th gi tr c bc i s l cc s


nguyn t 0..SLDU[i].
Bi ton a v: Duyt cc cch loi phn t (cc b x[1], x[2], , x[n], x[i] =
0..SLDU[i]), sau cp nht k lc tm ra 1 cch loi t phn t nht. Kt qu ca
bi ton s gm cc phn t khng b loi, khi s gm nhiu phn t nht.
Nh vy, t 1 bi ton tm Max ta chuyn v 1 bi ton tm Min c
phc tp nh hn (thi gian thc hin nhanh hn), a v vic gii 1 bi ton c kch
thc nh hn, n gin hn;
{Chng trnh ny c th chy nhanh vi n=10000, k= 1000}
program Dayso;
uses crt;
const
fi = 'DAYCON.INP';
Duyt cc cu hnh t hp v ng dng

Trang 69

THPT CHUYN BC GIANG

fo = 'DAYCON.OUT';
maxn = 10000;
maxk = 1000;
type
ksldu = array [0..maxk-1] of integer;
kad = array [1..maxn ] of integer;
kloai = array[1..maxn] of boolean;
kx
= array [1..maxk-1] of integer;
var
a
: kad;
du
: kad;{du[i] = j nghia la phan tu thu i chia cho k duoc so du la j}
sldu
: ksldu;{sldu[i] = j so luong cac so chia cho k du i la bang j}
loai
: kloai;
{danh dau cac chi so can loai bo}
x,kqx
: kx;
n, k, d
: integer;
min, tongdu, r,tdloai, slloai
: longint;
f
: Text;
procedure nhap;
var
inp: text;
i, t: integer;
begin
assign(f, fi); reset(f);
readln(f, n, k);
for i:=1 to n do read(f,a[i]);
close(f);
tongdu := 0;
for i:=1 to n do begin du[i] := a[i] mod k; tongdu:= tongdu+du[i]; end;
r := tongdu mod k;
assign(f,fo); rewrite(f);
end;
procedure XetDacBiet;
var
i, j: integer;
begin
if r=0 then
begin
writeln(f,n);
for i:=1 to n do
begin write(f,i:6); if (i mod 100) = 0 then writeln(f); end;
Duyt cc cu hnh t hp v ng dng

Trang 70

THPT CHUYN BC GIANG

close(f);
halt;
end;
for i:=1 to n do loai[i] := false;
j :=0;
for i:=1 to n do if du[i] = r then
begin
loai[i] := true; j := i; break;
end;
if j>0 then
begin
writeln(f,n-1);
for i:=1 to n do
if not loai[i] then
begin write(f,i,' '); if (i mod 100) = 0then writeln(f); end;
close(f);
halt;
end;
end;
procedure try(i: integer);
var j : integer;
begin
for j:=0 to sldu[i] do
begin
x[i] := j; {ngha l: trong cc s chia cho k d i cn loi i j s}
slloai := slloai + j; {s lng s cn loi i}
tdloai := tdloai + i*j; {tng d ca cc s loi i}
if i = k-1 then
begin
if (tdloai mod k = r) and (slloai < min) then
begin
min := slloai;
kqx := x;
end;
end
else if slloai < min then try(i+1);
tdloai := tdloai - i*j;
slloai := slloai - j;
end;
end;
Procedure Tim;
Duyt cc cu hnh t hp v ng dng

Trang 71

THPT CHUYN BC GIANG

var i: integer;
Begin
for i:=1 to k-1 do sldu[i] :=0;
for i:=1 to n do sldu[du[i]] := sldu[du[i]] + 1;
slloai := 0; tdloai := 0;
min := maxlongint;
try(1);
for i:=1 to n do loai[i] := false;
for i:=1 to n do
if kqx[du[i]] <>0 then
begin
dec(kqx[du[i]]);
loai[i] := true;
end;
writeln(f,n-min);
for i:=1 to n do
if not loai[i] then
begin
write(f,i,' ');
if i mod 100 =0 then writeln(f);
end;
close(f);
End;
begin
nhap;
XetDacBiet;
Tim;
end.
Bi 7: Chia ko
C N gi ko (N nguyn dng, N < 50), cc gi ko c nh s t 1 n N,
gi ko th i c Ai ci ko (Ai nguyn dng v Ai < 20; i = 1, 2, 3, , N).
Hy tm mt cch chia cc gi ko thnh hai nhm sao cho tng s ko trong hai
nhm chnh lch nhau t nht.
D liu: Nhp N v N s A1, A2, , AN t file vn bn KEO.INP c cu trc
gm 2 dng: dng u ghi s N, dng th hai ghi cc s ln lt t A1 n AN. Cc
s bt u ghi t u dng theo th t t tri sang phi.
Kt qu: Ghi ra tp vn bn KEO.OUT gm 3 dng:
Dng u tin ghi 3 s X, Y, Z, trong X l s ko chnh lch gia hai nhm,
Y l s ko ca nhm 1, Z l s ko ca nhm 2;
Duyt cc cu hnh t hp v ng dng

Trang 72

THPT CHUYN BC GIANG

Dng th hai ghi s hiu cc gi ko ca nhm 1.


Dng th ba ghi s hiu cc gi ko ca nhm 2.
V d:
KEO.INP
8
19 5 20 13 16 20 18
2

KEO.OUT
1 56 57
356
12478

Bi 8: Xp hng mua v
C N ngi xp hng mua v. Ta nh s h t 1 n N theo th t ng trong
hng (t u hng n cui hng). Thi gian phc v bn v cho ngi th i l ti. Mi
ngi cn mua mt v nhng c quyn mua ti a 2 v, v th mt s ngi c th
nh ngi ng ngay trc mnh mua h. Ngi th i nhn mua h v cho ngi th
i+1 th thi gian mua v cho 2 ngi l ri.
Yu cu: Tm phng n sao cho N ngi u c v vi thi gian t nht.
D liu: c t file vn bn MUAVE.INP gm c 3 dng, dng th nht ghi s
nguyn dng N, dng th hai ghi N s t1, t2,, tN, dng th ba ghi N-1s r1, r2, ,
rN-1.
Kt qu: ghi ra file vn bn MUAVE.OUT gm: dng th nht l tng thi gian
phc v bn v. Dng tip theo ghi ch s ca cc khch hng cn ri khi hng
V d:
MUAVE.INP

MUAVE.O
UT

17

2 5 7 8 4

2 4

3 9 10 10
Bi 9: To chui k t
Cho 3 k t A, B, C v mt s nguyn dng N ( 4 <=N<=100).
Yu cu: T 3 k t trn hy vit chng trnh to ra chui k t tho mn cc
tnh cht sau:
C di N.
Khng c hai chui con lin tip no ging nhau.
S k t B l t nht
D liu: Nhp s N t file vn bn CHUOIKT.INP

Duyt cc cu hnh t hp v ng dng

Trang 73

THPT CHUYN BC GIANG

Kt qu: Ghi ra file vn bn CHUOIKT.OUT c cu trc:


Dng u ghi s k t B t nht trong chui
Dng 2 ghi chui tm c
V d:
CHUOIKT.INP

CHUOIKT.OUT

10

2
ACABACBCAC

Bi 10: Cc thanh g
ng Ho Bnh c mt tp hp cc thanh g c di bng nhau l L.
ng cht cc thanh g ra mt cch ngu nhin nhng di cc mu con u c
di nguyn.
V sau ng Ho Bnh c nh gn cc mu con khi phc li cc thanh g
ban u nhng li qun mt di L. ng quyt nh to lp cc thanh g c
di bng nhau.
Hy gip ng Ho Bnh to lp cc thanh g c di nh nhau v cnh ngn
cng tt.
D liu: vo cho t file vn bn THANHGO.INP
Dng u ghi s N (N <50), s lng cc mu g
Trn mi dng trong N dng tip theo ghi Li (0 < Li < 100), l s nguyn,
di mu g th i.
Kt qu: ghi ra file vn bn THANHGO.OUT
Dng u ghi L l di ngn nht tm c
Trn mi dng ghi di cc mu g dng ghp thnh thanh g
* V d:
THANHGO.INP
10
2
3
5
2
7
4
6
Duyt cc cu hnh t hp v ng dng

THANHGO.OUT
9
234
531
72
63

Trang 74

THPT CHUYN BC GIANG

1
3
3
Bi 11: Trng cy
Nh ng G S vn ho tnh BG c mt i snh rng v p. ng c nh
trng mt s loi cy cnh vo N chu hoa c thit k c nh thnh mt hng
trn i snh, cc chu hoa c s th t t 1 n N tnh t tri sang phi. Bit c
thch ca ng, cc bn b mua tng ng M cy cnh khc nhau trng vo cc
chu hoa ni trn. Mi cy cnh c mt s hiu duy nht trong khong t 1 n M.
ng mun trng cc cy cnh vo cc chu hoa theo th t rng buc nu c cy
cnh s hiu i v cy cnh s hiu j m i<j th cy cnh s hiu i s c trng bn
tri cy cnh s hiu j. Tt c cc cy cnh u c trng vo cc chu hoa sao cho
m bo rng buc v th t cc s hiu. Nu s chu hoa nhiu hn s cy cnh th
nhng chu hoa khng dng ti s trng. Mi chu hoa ch c trng mt cy
cnh.
Mi chu hoa c thit k v hnh dng, kch thc, kiu cch c th khc nhau
(cc cy cnh cng c th khc nhau). V th, khi mt cy cnh i c trng vo mt
chu hoa j s c mt gi tr thm m nht nh, gi tr ny c biu din bi mt s
nguyn aij. Cc chu hoa trng c gi tr bng 0.
Yu cu: Hy tm cch trng cc cy cnh vo cc chu hoa tun theo rng buc
v th t sao cho tng cc gi tr thm m l ln nht. Nu c nhiu cch trng c
cng gi tr thm m th ch cn a ra ng mt cch.
D liu: vo t file vn bn TREE.INP gm:
Dng u tin ghi 2 s M v N (1 < N < 100; M < N < 100).
M dng tip theo, mi dng ghi N s, dng i ghi a[i,1],.., a[i,N] vi -50<a[i,j]<
50 l gi tr thm m khi trng cy cnh i vo chu hoa j.
Kt qu: ghi ra file vn bn TREE.OUT:
Dng u tin l tng s thm m ca cch trng.
Dng th hai ghi M s, s th k ghi s hiu ca chu hoa m cy cnh s hiu
k trng vo.
V d:
TREE.INP

TREE.
OUT

35
7

53
23 -5

-24

Duyt cc cu hnh t hp v ng dng

4
Trang 75

THPT CHUYN BC GIANG

16

5
5

21

-4

10

23
-21
-20 20

-4

Bi 12 :Rbt qut vi
C 9 cn phng (nh s t 1 n 9) c qut vi vi mu trng, xanh hoc
vng. C 9 rbt (nh s t 1 n 9) ph trch vic qut vi cc phng. Mi rbt
ch qut vi mt s phng nht nh. Vic qut vi c thc hin nh mt chng
trnh ci sn theo qui tc:
nu phng ang c mu trng th qut mu xanh,
nu phng ang c mu xanh th qut mu vng,
nu phng ang c mu vng th qut mu trng,
Cn phi gi ln lt mt s cc rbt ra qut vi (mi ln mt rbt, mt rbt
c th gi nhiu ln v c th c rbt khng c gi. Rbt c gi s qut vi tt
c cc phng m n ph trch) cui cng cc phng u c mu trng.
Hy tn mt phng n nh vy sao cho lng vi phi qut l t nht. Gi thit
rng lng vi cho mi lt qut i vi cc phng l nh nhau.
D liu: vo t fie vn bn ROBOTQV.INP gm cc dng: 9 dng u, mi
dng m t danh sch cc phng c qut vi bi mt rbt theo th t t rbt 1
n rbt 9. Mi dng nh vy gm cc s hiu phng vit st nhau. Chng hn dng
th 2 c ni dung : 3578
M t rbt 2 ph trch vic qut vi cc phng 3, 5, 7, 8.
Dng cui m t mu vi ban u ca cc phng. Dng gm 9 k t vit st
nhau, k t th i biu din mu vi ca phng i vi qui c: k t T ch mu trng, k
t X ch mu xanh, k t V ch mu vng, .
Kt qu: ghi ra tp vn bn ROBOTQV.OUT gm mt dng di dng:
Nu khng c phng n th ghi mt ch s 0.
Tri li ghi dy th t cc rbt c gi (cc s hiu rbt vit st nhau)
V d:
ROBOTQV.INP
159
123
357
147
Duyt cc cu hnh t hp v ng dng

ROBOTQV.INP
2455688

Trang 76

THPT CHUYN BC GIANG

5
369
456
789
258
XVXVXVTXT

*Phn tch thut ton


Mi phng n gi Rbt l mt chnh hp lp chp 9 ca 3 phn t {0,1,2}.
K hiu x = (x1, x2, ...,xn); vi xi := j ngha l Rbt i c gi j ln.
Gi r[i] l xu k t cho bit danh sch cc phng do Rbt i ph trch
9

Khi gi ca phng n x =

xi * length(r[i])
i

Bi 13: Xu i xng
Xu k t S c gi l xng nu cc k t cch u u v cui l ging
nhau. V d ABA v abcba l nhng xu i xng.
Xt cc xu c khng qu 2000 k t, ch cha cc k t A..Z, a..z, 0..9. Hy xo
i t k t nht thu c xu i xng.
D liu: vo t file vn bn XDX.INP
Dng u tin cha s n biu th chiu di xu
T dng th hai l n k t vit lin nhau, c th tri trn nhiu dng, mi dng
khng qu 70 k t
Kt qu: Ghi ra tp vn bn XDX.OUT cha s m biu th s k t cn xo
V d:
XDX.INP

XDX.OUT

bbC1221bA
Bi 14: Xp lch 1
Cho N cng vic, vi mi cng vic cho bit tin cng thu c khi thc hin
cng vic ny, thi gian hon thnh, thi im cui cng phi kt thc. Hy xp
lch thc hin sao cho thu c nhiu tin cng nht.
D liu: Vo t file vn bn XL1.INP gm:
+ Dng u l s nguyn dng N.

Duyt cc cu hnh t hp v ng dng

Trang 77

THPT CHUYN BC GIANG

+ N dng sau, dng i+1 ghi 3 s tg, tdkt, gt tng ng l thi gian cn thit
hon thnh, thi im bt buc phi xong, gi tr tin cng ca cng vic i, vi
(i=1,...,N);
Kt qu: Ghi ra file vn bn XL1.OUT nh sau:
+ Dng u tin l tng gi tr tin cng;
+ Cc dng tip theo, mi dng ghi 4 s: i, T1, T2, gt tng ng l s hiu cng
vic, thi im bt u, thi im kt thc, gi tr ca cng vic c chn.
V d:
XL1.I
NP

XL1.OU
T

10
1

329
5 0 1

89

25
5

86

1 2

2 6

6 9

89
4

11

83

83
5

84

61
1

11

11

25

10
14 71

61
61
28
10
14

3
1
5
71

Bi 15: Cho thu my tnh


Ti thi im 0, ng ch cho thu my tnh nhn c n t hng thu s
dng ca N khch hng. Cc khch hng c nh s t 1 n N. Khch hng i cn
s dng my t thi im di n thi im ci (di v ci l cc s nguyn v 0 < di < ci
< 1000000000), v s tr tin s dng my l pi (pi nguyn, 0 < pi < 10000000);

Duyt cc cu hnh t hp v ng dng

Trang 78

THPT CHUYN BC GIANG

Hy xc nh xem ng ch cn nhn phc v nhng khch hng no sao cho


khong thi gian s dng my tnh ca hai khch hng c nhn phc v bt k
khng giao nhau v tng tin thu c t phc v l ln nht.
D liu: vo t file vn bn RENTING.INP. Dng u tin ghi s N (0 < N <
1000). Dng th i trong N dng tip theo ghi ba s di, ci, pi cch nhau bi du trng,
i=1,2,..,N.
Kt qu: ghi ra file vn bn RENTING.OUT. Dng u tin ghi hai s nguyn
dng theo th t l s lng khch hng nhn c phc v v tng tin thu c.
Dng tip theo ghi ch s ca khch hng c phc v.
V d:
RENTING.IN
P
3
150 500 150
1
200 100
400 800 80

RENTING.OUT RENTING.IN
P
2 180
4
2 3
400 821 800
200 513 500
100 325 200
600 900 600

RENTING.OUT
2
2

1100
4

Bi 16: Xoay
Mt din tch c to bi cc vung, gm N hng v N ct (cc hng c
nh s t 1 n N theo chiu t trn xung di v cc ct c nh s t 1 n N
theo chiu t tri sang phi). Mi vung c chia i theo ng cho: Mt na
mu en, mt na mu trng. Trng thi ca mi vung c m ha t 0 n 3
theo hnh v sau:

Mt din tch c xc nh bi trng thi cc vung ca n. C th thay i


trng thi ny bng cch xoay cc theo chiu kim ng h mt trong nhng gc 90,
180o, 270o.
Din tch c gi l hp l nu cc phn cng mu ca cc st nhau khng
c c chung cnh, chng hn din tch trong hnh 1 l khng hp l, hnh 2 l hp
l:

Duyt cc cu hnh t hp v ng dng

Trang 79

THPT CHUYN BC GIANG

Hnh 2

Hnh 1

Hy xc nh xem din tch cho hp l cha? Nu cha, cn tm cch


xoay li mt s cn thit din tch l hp l, sao cho s cn xoay l t nht.
D liu vo cho trong file vn bn ROT.INF, dng u l s N, tio theo l bng
N dng, N ct ghi trng thi ca cc tng ng. Cc gi tr trn cng mt dng ghi
cch nhau t nht mt du trng.
Li gii a ra file vn bn ROT.INF, trong nu din tch cho l hp l th
ch cn ghi mt s 0, tri li vn bn gm dng u tin l s cn xoay, cc dng
tip, mi dng mi dng m t mt cn xoay bao gm: ta hng, ta ct v
gc cn xoay theo chiu kim dng h ca (tnh theo n v - l mt trong cc gi
tr 90, 180, 270). Cc s ny ghi cch nhau t nht mt du trng.
Th d:
ROT.INF (Hnh 1) ROT.OUT din tch nhn c cho bi hnh 2.
4
6
Gii hn kch thc N 10.
2
2
2
1

0
0
0
2

1
3
2
1

0
2
3
0

1
2
2
2
3
4

1
1
3
4
2
2

270
270
180
180
270
180

Phn tch thut ton


Vn bn chng trnh
Program Xoayo;
uses crt;
const fi = 'ROT.INP';
fo = 'ROT.OUT';
otren:array[0..3,0..3] of integer = ((0,1,1,0),(0,1,1,0),(3,2,2,3),(3,2,2,3));
oduoi:array[0..3,0..3] of integer = ((0,0,3,3),(1,1,2,2),(1,1,2,2),(0,0,3,3));
maxn=10;
var a,b,kqb:array[1..maxn,1..maxn]of integer;
f:text;
Duyt cc cu hnh t hp v ng dng

Trang 80

THPT CHUYN BC GIANG

n,min,i:integer;
Procedure init;
var i,j:integer;
Begin
assign(f,fi); reset(f);
readln(f,n);
for i:=1 to n do
for j:=1 to n do read(f,a[i,j]);
b:=a;
close(F);
min:=n*n;
End;
procedure cnkl;
var i,k,j,d:integer;
begin
d:=0;
for i:=1 to n do
for k:=i-1 downto 1 do
begin
b[k,i]:=otren[b[k,i-1],b[k+1,i]];
b[i,k]:=oduoi[b[i-1,k],b[i,k+1]];
end;
for i:=1 to n do
for j:=1 to n do
if a[i,j]<>b[i,j] then
Begin
inc(d);
if d > min then exit;
End;
if d < min then
begin
min:=d;
kqb:=b;
end;
end;
Procedure try(i:integer);
var j:integer;
begin
for j:=0 to 3 do
begin
b[i,i]:=j;
Duyt cc cu hnh t hp v ng dng

Trang 81

THPT CHUYN BC GIANG

if i=n then cnkl else


try(i+1);
end;
end;
procedure viet;
var i,j,doo:integer;
begin
assign(f,fo);rewrite(f);
writeln(f,min);
for i:=1 to n do
for j:=1 to n do
if a[i,j]<>kqb[i,j] then
begin
doo:=(kqb[i,j]-a[i,j])*90;
if kqb[i,j]<a[i,j] then doo:=doo+360;
writeln(f,i,' ',j,' ',doo);
end;
close(f);
end;
BEGIN
init;
try(1);
viet;
END.
Bi 17: Ba c l
C N phiu c l hnh vung. Tren mi phiu c l c K*K hnh trn c b
tr thnh K hng ngang, K hng dc, mi hng K l, sao cho tt c cc hnh trn c
c thng th v tr cc l c l trng nhau khi xp cc phiu ny thnh mt chng,
cho d c mt s phiu c xoay 90o, 180o, 270o.
Trn mi phiu c mtt s hnh trn c c thng.

Khi xp cc phiu thnh mt chng, cc hnh trn cng mt v tr to thnh


mt ct.

Duyt cc cu hnh t hp v ng dng

Trang 82

THPT CHUYN BC GIANG

Yu cu: Hy ch ra mt s t nht cc phiu cn xoay sao cho nu xp chng thnh


mt chng th trn mi ct u c t nht mt hnh trn c c thc, hoc cho bit
iu ny khng th thc hin c.
D liu: Vo t file vn bn BN4.INF:
- Dng u l 2 s nguyn N, K (1 N 20,
2 K 10).
- Dng th i trong N dng tip theo cha
K*K s 0, 1 cho bit trng thi cc hnh trn ca
phiu th i, lit k theo hng ngang, t tri sang
phi v t trn xung di, trong s 1 (0) ch
ra v tr tng ng l l c (khng c).
Cc s trn 1 dng cch nhau t nht mt
du cch.
Kt qu: a ra file vn bn BL4.OUT:
- Dng u tin cha s nguyn M l s phiu cn xoay. M = -1 l khng c cch
xoay.
- Trong trng hp M 0, th dng th 2 cha N s nguyn R1, R2,, RN, Ri bng
0, 1, 2 hoc 3, cho bit ba th i cn xoay Ri*90o theo chiu kim ng h.
- Nu c nhiu cch chn M phiu xoay th ch cn nu mt trong s .
V d:
5
1
0
0
0
1
1
0
0
1
0

BL4.INP
3
0 0 0 1 0 0 0

BL4.OUT
3
0 0 1 1 3

1 0 1 0 0 0 0
0 0 0 1 0 0 0
1 0 0 0 0 1 0
0 0 1 0 0 0 0

Ch : - Cc file bi lm phi c t tn tng ng l BL3.PAS v BL4.PAS.


Bi 18: Bu c
Bi 19: Chn K s tng ln nht
Cho ma trn kch thc m.n gm cc s nguyn nm trong khong 0..99.
Duyt cc cu hnh t hp v ng dng

Trang 83

THPT CHUYN BC GIANG

Yu cu: Hy chn ra k s sao cho tng cc s c chn l ln nht, bit rng


trn mi dng, mi ct chn nhiu nht mt s.
D liu: Vo t file vn bn CHONK.INP c cu trc:
Dng u ghi 3 s m, n, k. (1< k < m,n < 100)
M dng tip theo, mi dng ghi n s tng ng vi cc gi tr trong ma trn
Kt qu: Ghi ra file vn bn CHONK.OUT c cu trc:
Dng u tin ghi tng ln nht tm c
K dng tip theo, mi dng ghi 3 s: s th nht l gi tr ca s tm c, hai
s sau l to [dng, ct] ca s c chn.
V d:
CHONK.INP

CHONK.OUT

72

12 9 7 17

19 4

19 3

21 19 15 7

19 8

25 5

12

9 19
5

2 8 25

*Phn tch thut ton:


Mi phng n ca bi ton l mt b c th t gm k thnh phn: x = (x1, x2,
, xk), trong xi = (dng i, ct i), dng i = 1, 2, , m v ct i = 1, 2, , n; nu i
<> j th xi <> xj ;
V dng i c m kh nng la chn v ct i c n kh nng la chn nn b hai
thnh phn (xi, yi) c m*n kh nng la chn.
k

Gi ca mi phng n bng f(x) =

a[xi]
1

Bi ton a v: duyt cc chnh hp khng lp chp k ca m*n phn t, tnh


gi ca cc phng n, s snh gi ca cc phng n vi nhau v gi li phng n
c gi ln nht
* Vn bn chng trnh
Program chonKSoCotongLonNhat;
uses crt;
const
Duyt cc cu hnh t hp v ng dng

Trang 84

THPT CHUYN BC GIANG

fi = 'CHONK.INP';
fo = 'CHONK.OUT';
Maxmn = 100;
var
a: array[1..maxmn,1..maxmn] of byte;
dong, cot, kqd, kqc
: array[1..maxmn] of byte;
cxd, cxc
: array[1..maxmn] of boolean;
m, n, k
: byte;
tmax, s
: longint;
procedure init;
var
f: text;
i,j : integer;
begin
assign(f,fi); reset(f);
readln(f,m,n,k);
for i := 1 to m do
for j:=1 to n do read(f,a[i,j]);
close(f);
fillchar(cxd, sizeof(cxd), true);
fillchar(cxc, sizeof(cxc), true);
s := 0; tmax := -maxint;
end;
procedure cnkl;
var i,j : integer;
begin
if s > tmax then
begin
tmax := s;
kqd := dong;
kqc := cot;
end;
end;
procedure inkq;
var i,j : integer;
f : text;
begin
assign(f,fo); rewrite(f);
writeln(f,tmax);
for i := 1 to k do writeln(f,a[kqd[i],kqc[i]],' ',kqd[i],' ',kqc[i]);
close(f);
Duyt cc cu hnh t hp v ng dng

Trang 85

THPT CHUYN BC GIANG

end;
procedure try(i:integer);
var d,c : integer;
begin
for d := 1 to m do
for c:=1 to n do
begin
if cxd[d] and cxc[c] then
begin
dong[i] := d;
cot[i] := c;
s := s + a[d,c];
cxd[d] := false;
cxc[c] := false;
if i = k then cnkl
else try(i+1);
cxd[d] := true;
cxc[c] := true;
s := s - a[d,c];
end;
end;
end;
BEGIN
init;
try(1);
inkq;
END.
Bi 20: Tm tng nh nht
Cho ma trn gm m dng, n ct c cc phn t l cc s nguyn a[i,j], trong |
a[i,j]|<30000 (i=1..m, j=1..n).
Yu cu: Hy chn trn mi dng, mi ct ca ma trn ng mt s sao cho
khng c hai s no thuc cng mt dng hay cng mt ct tng cc s c chn
l nh nht.
D liu: Vo t file vn bn TONGMIN.INP c cu trc:
Dng u ghi 2 s nguyn m, n. (1 < m < 100, 1 < n < 30);
Trong m dng tip theo, dng th i ghi n s a[i,j] vi i=1..m, j=1..n;
Kt qu: Ghi ra file vn bn TONGMIN.OUT c cu trc:
Dng u tin ghi tng nh nht tm c
Duyt cc cu hnh t hp v ng dng

Trang 86

THPT CHUYN BC GIANG

Trong n dng tip theo, mi dng ghi 3 s: s th nht l gi tr ca s c


chn, hai s sau l to [dng, ct] ca s c chn.
V d:
TONGMIN.INP
7 4
8
6 -18 0
-15 1 15 0
-5 0 9 13
11 -14 -12 12
19 3 14 12
20 -4 2 17
10 -8 5 -20

TONGMIN.OUT
-67
-18 1 3
-15 2 1
-14 4 2
-20 7 4

*Phn tch thut ton:


* Nu m < n th : duyt cc chnh hp khng lp chp m ca n phn t {1,2,
,n}, tc l mi phng n cn tm l mt b x = (x1, x2, , xm), xi = j ngha l
chn s hng i ct j; i = 1, 2,.., m; j = 1,2, ,n; tnh gi ca phng n x bng cng
m

thc f(x) =

a[i,x[i]] v gi li phng n c gi tr nh nht


i=1

* Nu m > n th : duyt cc chnh hp khng lp chp n ca m phn t {1,2,


,m}, tc l mi phng n cn tm l mt b x = (x1, x2, , xn), xi = j ngha l
chn s ct i hng j; i = 1, 2,.., n; j = 1,2, ,m; tnh gi ca phng n x bng cng
n

thc f(x) =

a[x[i],i] v gi li phng n c gi tr nh nht


i=1

Duyt cc cu hnh t hp v ng dng

Trang 87

THPT CHUYN BC GIANG

KT LUN
Hin nay cha c ti liu chnh thc dnh cho lp Chuyn Tin khi THPT. M
ch tn ti di dng tn chuyn ca B Gio dc gi v cho cc trng. Do vy
vic dy v hc gp nhiu kh khn trong vic thng nht v ni dung cng nh mc
v kin thc chuyn mn. Nn vic nghin cu v xy dng chuyn ny l thc
s cn thit.
Mc ch ca chuyn l truyn ti mt cch tng qut, chi tit v s thng
nht v mt ni dung ngi c d hiu v thy c tm quan trng ca bi ton
lit k t hp v mt s bi tp ng dng trong Tin hc dnh cho hc sinh chuyn tin
trng THPT.
Ni dung ca chuyn c cc tc gi chn lc qua chng trnh thc
dy ti trng v tham kho ca mt s ng nghip khc trong nc.
Kin thc l v hn, trong chuyn ny chng ti c gng sng to, su
tm v trao i mt cch tt nht c th v mt l thuyt, cc bi tp ng dng v cc
bi tp trong cc k thi trong nc to thnh cun ti liu hiu qu dnh cho gio
vin v cc em hc sinh am m tin hc chnh thc lm ti liu cho mnh trong qu
trnh hc tp v nghin cu.

Duyt cc cu hnh t hp v ng dng

Trang 88

THPT CHUYN BC GIANG

TI LIU THAM KHO


[1]. Nguyn c Ngha, Nguyn T Thnh. Ton ri rc, NXB HQGHN,
2003
[2]. ThS.Trn c Huyn. Phng php gii cc bi ton trong Tin hc.
NXBGD. 2004
[3]. Nguyn Xun Huy. Sng to trong thut ton v lp trng. NXBGD. 2007.
[4]. L Minh Hong. Gii thut v lp trnh A.D.A DSAP Textbook,
DHSPHN, 1999-2002. <Internet>
[5]. Trn Tun Minh. Thit k v nh gi thut ton. lt. <Internet>
[6]. L Minh Hong. Bi ging cc chuyn .
[7]. PGS. TS. Bi tp lp trinh Turbo Pascal 7.0
[8]. Robert Sedgewick. Cm nang thut ton. tp 1,2. NXB Khoa hc K thut.
Nm XB 1998.

Duyt cc cu hnh t hp v ng dng

Trang 89

THPT CHUYN BC GIANG

MC LC
M U...............................................................................................................................................1
PHN 1. L THUYT T HP.........................................................................................................2
I. S LC V T HP................................................................................................................2
Khi nim.....................................................................................................................................2
Cc bi ton thng gp...............................................................................................................2
II. NHC LI L THUYT TP HP.........................................................................................2
1. Cc khi nim v k hiu.........................................................................................................2
Cc php ton trn tp hp...........................................................................................................3
III. CC NGUYN L C BN....................................................................................................3
1. Nguyn l cng.........................................................................................................................3
Nguyn l nhn.............................................................................................................................4
Nguyn l b tr...........................................................................................................................6
Nguyn l Dirichl........................................................................................................................7
IV. MT S CU HNH T HP THNG GP......................................................................8
1. Hon v.....................................................................................................................................8
Chnh hp lp chp k ca n phn t.............................................................................................8
Chnh hp khng lp chp k ca n phn t..................................................................................9
T hp k ca n phn t.................................................................................................................9
PHN 2. PHNG PHP SINH.......................................................................................................12
I. Khi nim....................................................................................................................................12
II. p dng phng php sinh vo gii mt s bi ton................................................................13
1. Bi ton 1: Lit k tt c cc dy nh phn c di N. .......................................................13
Bi ton 2: Lit k cc tp con m phn t ca tp n phn t......................................................14
Bi ton 3: Lit k cc hon v ca tp n phn t.......................................................................17
Bi ton 4: Phn tch s nguyn dng N thnh tng cc s nguyn khng m.......................19
PHN 3. GII THUT QUAY LUI..................................................................................................23
1. tng...................................................................................................................................23
Thut ton quay lui.....................................................................................................................26
Cc v d.....................................................................................................................................30
Ti liu tham kho......................................................................................................................49
PHN IV. NG DNG.....................................................................................................................52
I. KHI NIM BI TON TI U.............................................................................................52
1. Mt s khi nim....................................................................................................................52
Mt s phng php gii bi ton ti u t hp........................................................................55
II. PHNG PHP DUYT GII BI TON TI U.............................................................56
1. T tng ch o...................................................................................................................56
Cu trc ca phng php duyt tng qut................................................................................56
III. BI TP P DNG................................................................................................................58
KT LUN.........................................................................................................................................88
TI LIU THAM KHO...................................................................................................................89
MC LC...........................................................................................................................................90

Duyt cc cu hnh t hp v ng dng

Trang 90

You might also like