You are on page 1of 4

tut ny dnh cho nhng bn bit v quy hoch ng, nu cha bit bn c th tham kho

cc ti liu khc
Bi vit chc hn cn nhiu thiu st, rt mong nhn c s gp t pha cc bn bi vit
c hon thin hn

Chapter 1: M u
Mt cht v khi nim quy hoch ng
Nhc li v bi ton quy hoch:
[I]Bi ton quy hoch l bi ton ti u: gm c 1 hm f gi l hm mc tiu hay hm nh
gi; cc hm g1, g2, gn cho gi tr logic c gi l hm rng buc. Yu cu ca bi ton l tm
1 cu hnh x tha mn cc rng buc g1, g2, , gn: gi(x) = true vi mi 1 <= i <= n v x tt nht
tc l khng tn ti 1 cu hnh y no khc tha mn cc rng buc trn m f(y) tt hn f(x)[/I]
(Trch DSAP )

Trong bi vit ny v cc bi vit tip theo ca mnh, ta gi x l 1 nghim ca bi ton, v bi


ton ti u l bi ton tm ra nghim x tt nht
Nh cc bn bit, gii bi ton ti u ny, cc phng php nh quay lui hay duyt nhnh
cn duyt ht nhng nghim ca bi ton c th l tt nht, t a ra c kt qu ca bi
ton. Cn quy hoch ng tip cn bi ton ti u nh th no, chng ta hy cng tm hiu
thng qua v d di y:
Bi ton:
Cho dy s nguyn a[1], a[2], , a[n]. Tm cch chia dy s thnh s phn sao cho tng bnh
phng ca tng cc phn l ln nht.
V d dy 1 2 3 4 5 chia thnh 2 phn nh th ny 1 2 3 | 4 5 th tng bnh phng ca tng cc
phn l: (1 + 2 + 3)^2 + (4 + 5)^2 = 117
Cch gii:
Gi f[i][j] l tng ln nht t c nu chia i s u tin ra lm j phn. Kt qu bi ton l
f[n][s ].
Cng thc truy hi:
f[i][j] = max(f[k][j 1] + sum[k + 1..i]^2) vi k chy t 1 n i, sum[k + 1..i] l tng cc s
t k + 1 n i.
C s qh:

f[0][0] = 0
f[0][i] = -oo vi mi i > 0
Ci m mnh mun ni n khng phi bi ton hay thut ton gii bi ton ny m l cch
chng ta hiu v f[i][j].

Theo quan im c nhn mnh, chng ta c th hiu f[i][j] l 1 tp cc cch chia i s u tin ra
lm j phn, hay ni cch khc, n chnh l tp nghim ca bi ton vi n = i, s = j (xem li khi
nim v nghim ca bi ton phn u). V trong thc t lp trnh, chng ta ch cn lu li

f[i][j] l gi tr ca nghim ln nht.


f[i][j] c tnh t f[k][j - 1] c ngha l tn ti 1 cch bin i t tp nghim f[k][j - 1] thnh 1
phn tp nghim ca f[k][j - 1]

V d vi dy 1 2 3 4 5
f[2][2] l 1 tp nghim ch gm 1 phn t
1|2
f[3][2] l 1 tp nghim gm cc phn t sau
1 2|3
1|2 3
f[4][3] l 1 tp nghim gm cc phn t sau
1|2|3 4
1|2 3|4
1 2|3|4
f[4][3] c tnh t f[3][2] v f[2][2], c th d dng nhn ra t tp nghim f[3][2] ta thm vo
|4, (tc l gi tr cc nghim trong f[3][2] cng thm 4^2) s c 2 nghim thuc f[4][3],
tng t vi f[2][2]. i vi bi ton ny c th tng qut ln l thm vo cc nghim thuc tp
f[k][j 1] dy |a[k + 1] a[k + 2] a[i], (tc l gi tr cc nghim trong f[k][j 1] cng thm
sum[k + 1..i]^2) th ta s c 1 phn nghim ca f[i][j].
C th d dng nhn thy rng f[n][s ] c tt c cc nghim ca bi ton, khng thiu cng
khng tha, vy nn kt qu ca bi ton s c ly ra t f[n][s ].
Ni n y th chng ta c th thy rng bn cht ca quy hoch ng cng l tm ra tp
nghim ca bi ton ri t tp nghim a ra nghim tt nht, c iu quy hoch ng lm 1
cch tinh t hn so vi duyt
Tm li, khi lm qh, cc bn thch chia bi ton th no th ty, nhng m khi ly kt qu ra t
1 hay nhiu trong bng phng n, th hp cc tp nghim ca nhng ny phi l tp cha ca
tp nghim bi ton (i vi nhng bi ton yu cu m s nghim th tp nghim ny phi
ng bng tp nghim ca bi ton)

Cc cch ci t QH:
Bi ton:
Cho 1 bng vung n x n, mi vung cha 1 s nguyn, tm ng i t (1, 1) n (n, n)
sao cho tng cc s trn ng i l ln nht v t (i, j) ch c th i n (i, j + 1) hoc (i + 1,
j) nu thuc bng.
Cch gii:
Gi f[i][j] l ng i c tng ln nht t (1, 1) n (i, j). Kt qu ca bi ton l f[n] [n].
C 2 cch xy dng cng thc truy hi:
[I]Cch 1: ta xem c th xy dng tp nghim ca f[i][j] nh th no.[/I]
Nhn thy rng mun i t (1, 1) n (i, j) chc chn phi i qua 1 trong 2 (i, j 1) v (i
1, j).

Nu i n (i, j) t (i 1, j), ng i s c dng f[i 1][j] -> (i, j), v gi tr ca ng


i c tng ln nht theo cch ny l f[i 1][j] + a[i][j]
Nu i n (i, j) t (i, j - 1), ng i s c dng f[i][j - 1] -> (i, j), v gi tr ca ng i
c tng ln nht theo cch ny l f[i][j - 1] + a[i][j]
Nh vy cng thc truy hi s l f[i][j] = max(f[i 1][j], f[i][j 1]) + a[i][j].
C s quy hoch ng s l nhng ci f khng th tnh theo cng thc kia:

f[1][1] = 0
f[1][i] = f[1][i 1] + a[1][i] vi i > 1
f[i][1] = f[i 1][1] +a[i][1] vi i > 1
C 2 cch code, 1 l tm ra th t tnh bng phng n sau tnh tun t theo th t , 1 l
dng quy c nh tnh f[n][n]

Cch tnh tun t thng c dng khi d dng xc nh c th t quy hoch ng.
Trong v d ny, chng ta s tnh bng phng n theo th t t tri qua phi, t trn xung
di.
M:

f[1][1]:= 0;
for i:= 2 to n do
begin
f[i][1]:= f[i 1][1] + a[i][1];
f[1][i]:= f[1][i 1] + a[1][i];
end;
for i:= 2 to n do
for j:= 2 to n do f[i][j]:= max(f[i 1][j], f[i][j 1]) + a[i][j];
writeln(f[n][s]);

Cch quy c nh thng c dng khi kh xc nh th t tnh ton, tuy nhin cch ny
thng tn thi gian thc hin chng trnh hn.
M:

// Hm cal tr v gi tr ca f[i][j]
function cal(i, j: longint): longint;
begin
// Nu f[i][j] c tnh th tr v f[i][j]
if f[i][j] <> -oo then exit(f[i][j]);
//
if
if
if
if
a[i][j];

Tnh
(i =
(i =
(i >
(i >

f[i][j]
1) and (j
1) and (j
1) and (j
1) and (j

=
>
=
>

1)
1)
1)
1)

then
then
then
then

f[i][j]:=
f[i][j]:=
f[i][j]:=
f[i][j]:=

exit(f[i][j]);
end;
begin
Khi to cc f[i][j] ban u bng -oo
...
writeln(cal(f[n][n]));
end.

a[1][1];
cal(i, j 1) + a[i][j];
cal(i 1, j) + a[i][j];
max(cal(i 1, j), cal(i, j 1)) +

[I]Cch 2: [/I][I]Gi s tnh c f[i][j], xt xem t f[i][j] c th cp nht cho nhng f no


khc.[/I]
Nhn xt t (i, j) c th i n c (i, j + 1) v (i + 1, j). Nu i sang (i, j + 1) ta s dng
c 1 tp nghim l tp con ca f[i][j + 1]. Nu i sang (i + 1, j) ta s dng c 1 tp nghim
l tp con ca f[i + 1][j].
T cng thc truy hi c xy dng nh sau:

f[i + 1][j] = max(f[i + 1][j], f[i][j] + a[i + 1][j])


f[i][j + 1] = max(f[i][j + 1], f[i][j] + a[i][j + 1])

M:

// Khi to mng f[i][j] = -oo


for i:= 1 to n do
for j:= 1 to n do f[i][j]:= -oo;
f[1][1]:= a[1][1];
for i:= 1 to n do
for j:= 1 to n do
begin
f[i + 1][j]:= max(f[i + 1][j], f[i][j] + a[i + 1][j]);
f[i][j + 1]:= max(f[i][j + 1], f[i][j] + a[i][j + 1]);
end;
writeln(f[n][n]);

Ngoi ra khi s trng thi trn tnh ton l thuyt kh ln trong khi trong thc t khng cn tnh
ht nhng trng thi ny th c 1 cch lm khc tng t nh loang, mnh s ni thm v n
trong nhng v d sau
Mi cch lm u c nhng u khuyt im ring, v vy cc bn cn s dng linh hot chng
vo cc bi ton khc nhau.

You might also like