CHUN Đ
QUY HO CH Đ NG
Chuyên đ : Quy ho ch đ ng –THPT Cà Mau
M C L C
Trang
CHUYÊN Đ ............................................................................................................. 1
QUY HO CH Đ NG .............................................................................................. 1
M C L C ................................................................................................................. 2
CHUYÊN Đ : QUY HO CH Đ NG .................................................................... 3
I. M T S KI N TH C V L P TRÌNH Đ NG ............................................. 3
II. M T S I TOÁN QUY HO CH Đ NG ĐI N HÌNH ............................ 5
i toán 12.1: Dãy con chung dài nh t (2) {DAYCON.PAS} ................ 34
2
B i d ng HSG – môn tin h c, tr ng THPT Cà Mau ưỡ ườ
CHUYÊN Đ : QUY HO CH Đ NG
***
I. M T S KI N TH C V L P TRÌNH Đ NG
1. Ph ng pháp quy ho ch đ ngươ
Ph ng pháp quy ho ch đ ng cùng nguyên t i u đ c nhà toán h c M R.Bellmanươ ư ượ
đ xu t vào nh ng năm 50 c a th k 20. Ph ng pháp này đã đ c áp d ng đ gi i hàng lo t ế ươ ượ
bài toán th c t trong các quá trình k thu t c ng ngh , t ch c s n xu t, k ho ch hoá kinh ế ế
t Tuy nhiên c n l u ý r ng m t s bài toán cách gi i b ng quy ho ch đ ng t raế ư
không thích h p.
Trong th c t , ta th ng g p m t s bài toán t i u lo i sau: m t đ i l ng ế ườ ư ượ f hình
thành trong m t quá trình g m nhi u giai đo nta ch quan tâm đ n k t qu cu i cùnggiá ế ế
tr c a f ph i l n nh t ho c nh nh t, ta g i chung giá tr t i u c a ư f. Giá tr c a f ph
thu c vào nh ng đ i l ng xu t hi n trong bài toán m i b giá tr c a chúng đ c g i ượ ượ
m t tr ng thái c a h th ng và ph thu c vào cách th c đ t đ c giá tr ượ f trong t ng giai đo n
m i cách t ch c đ c g i m t ượ đi u khi n . Đ i l ng ượ f th ng đ c g i ườ ượ m m c
tiêu và quá trình đ t đ c giá tr t i u c a ượ ư f đ c g i là ượ quá trình đi u khi n t i u ư .
Bellman phát bi u nguyên t i u (cũng g i ư nguyên Bellman) ý t ng c b nưở ơ
nh sau: “V i m i quá trình đi u khi n t i u, đ i v i tr ng thái b t đ u ư ư A0, v i tr ng thái
A trong quá trình đó, ph n quá trình k t tr ng thái A xem nh tr ng thái b t đ u cũng t iư
u”.ư
Chú ý r ng nguyên lý này đ c th a nh n mà không ch ng minh. ượ
Ph ng pháp tìm đi u khi n t i u theo nguyên Bellman th ng đ c g i ươ ư ườ ượ quy
ho ch đ ng . Thu t ng này i lên th c ch t c a quá trình đi u khi n đ ng: th trong
m t s b c đ u tiên l a ch n đi u khi n t i u d ng nh không t t nh ng t u chung c ướ ư ườ ư ư
quá trình l i là t t nh t.
Ta th gi i thích ý này qua bài toán sau: Cho m t dãy N s nguyên A1, A2,…,AN. Hãy
tìm cách xoá đi m t s ít nh t s h ng đ dãy còn l i đ n đi u hay nói cách khác hãy ch n ơ
m t s nhi u nh t các s h ng sao cho dãy B g m các s h ng đó theo trình t xu t hi n trong
dãy A là đ n đi u.ơ
Quá trình ch n B đ c đi u khi n qua ượ N giai đo n đ đ t đ c m c tiêu s l ng ượ ư
s h ng c a dãy B là nhi u nh t, đi u khi n giai đo n i th hi n vi c ch n hay không ch n
Ai vào dãy B.
Gi s dãy đã cho là 1 8 10 2 4 6 7. N u ta ch n l n l t 1, 8, 10 thì ch ch n đ c 3 s ế ượ ượ
h ng nh ng n u b qua 8 và 10 thì ta ch n đ c 5 s h ng 1, 2, 4, 6, 7. ư ế ượ
Khi gi i m t bài toán b ng cách “chia đ tr chuy n vi c gi i bài toán kích th c l n ướ
v vi c gi i nhi u bài toán cùng ki u kích th c nh h n thì thu t toán này th ng đ c ướ ơ ườ ượ
th hi n b ng các ch ng trình con đ quy. Khi đó, trên th c t , nhi u k t qu trung gian ph i ươ ế ế
tính nhi u l n.
V y ý t ng c b n c a quy ho ch đ ng th t đ n gi n: tránh tính toán l i m i th hai ưở ơ ơ
l n, l u gi k t qu đã tìm ki m đ c vào m t b ng làm gi thi t cho vi c tìm ki m ư ế ế ượ ế ế
nh ng k t qu c a tr ng h p sau. Chúng ta s làm đ y d n giá tr c a b ng này b i các k t ế ườ ế
qu c a nh ng tr ng h p tr c đã đ c gi i. K t qu cu i cùng chính k t qu c a bài ư ướ ượ ế ế
toán c n gi i. Nói cách khác ph ng pháp quy ho ch đ ng đã th hi n s c m nh c a nguyên ươ
lý chia đ tr đ n cao đ . ế
Quy ho ch đ ng k thu t thi t k bottom-up (t d i lên). đ c b t đ u v i ế ế ướ ượ
nh ng tr ng h p con nh nh t (th ng đ n gi i nh t gi i đ c ngay). B ng cách t ườ ườ ơ ượ
h p các k t qu đã có ( ế không ph i tính l i ) c a các tr ng h p con, s đ t đ t t i k t qu c a ườ ế
tr ng h p kích th c l n d n lên t ng quát h n, cho đ n khi cu i cùng đ t t i l i gi iườ ướ ơ ế
c a tr ng h p t ng quát nh t. ườ
Trong m t s tr ng h p, khi gi i m t bài toán ườ A, tr c h t ta tìm h bài toán ướ ế A(p) ph
thu c tham s p (có th p là m t véc t ) ơ A(p0)=A v i p0 là tr ng thái ban đ u c a bài toán A.
Sau đó tìm cách gi i h bài toán A(p) v i tham s p b ng cách áp d ng nguyên t i u c a ư
Bellman. Cu i cùng cho p=p0 s nh n đ c k t qu c a bài toán ượ ế A ban đ u.
2. Các b c th c hi n quy ho ch đ ng ướ
3
Chuyên đ : Quy ho ch đ ng –THPT Cà Mau
B cướ 1: L p h th c
D a vào nguyên t i u tìm cách chia quá trình gi i bài toán thành t ng giai đo n, sau ư
đó tìm h th c bi u di n t ng quan quy t đ nh c a b c đang x v i các b c đã x ươ ế ướ ướ
tr c đó. Ho c tìm cách phân bài toán thành các “bài toán con” t ng t kích th c nhướ ươ ướ
h n, tìm h th c nêu quan h gi a k t qu bài toán kích th c đã cho v i k t qu c a các “bàiơ ế ướ ế
toán con” cùng ki u kích th c nh h n c a nh m xây d ng ph ng trình truy toán ướ ơ ươ
(d ng hàm ho c th t c đ quy).
V m t cách xây d ng ph ng trình truy toán: ươ
Ta chia vi c gi i bài toán thành n giai đo n. M i giai đo n i có tr ng thái ban đ u là t(i)
ch u tác đ ng đi u khi n d(i) s bi n thành tr ng thái ti p theo t(i+1) c a giai đo n i+1 ế ế
(i=1,2,…,n-1). Theo nguyên t i u c a Bellman thì vi c t i u giai đo n cu i cùng không ư ư
làm nh h ng đ n k t qu toàn bài toán. V i tr ng thái ban đ u là t(n) sau khi làm giai đo n n ưở ế ế
t t nh t ta tr ng thái ban đ u c a giai đo n n-1 t(n-1) tác đ ng đi u khi n c a giai
đo n n-1 d(n-1), th ti p t c xét đ n giai đo n n-1. Sau khi t i u giai đo n n-1 ta l i ế ế ư
t(n-2) và d(n-2) và l i có th t i u giai đo n n-2 … cho đ n khi các giai đo n t n gi m đ n 1 ư ế ế
đ c t i u thì coi nh hoàn thành bài toán. G i giá tr t i u c a bài toán tính đ n giai đo n kượ ư ư ư ế
Fk giá tr t i u c a bài toán tính riêng giai đo n k là ư Gk thì
Fk = Fk-1 + Gk
Hay là:
(*) }))1(())(),(({G))((
1k
)(
1
+=
ktFkdktaxmktF
k
kd
B cướ 2: T ch c d li u và ch ng trình ươ
T ch c d li u sao cho đ t các yêu c u sau:
D li u đ c tính toán d n theo các b c. ượ ướ
D li u đ c l u tr đ gi m l ng tính toán l p l i. ượ ư ượ
Kích th c mi n nh dành cho l u tr d li u càng nh càng t t, ki u d li uướ ư
đ c ch n phù h p, nên ch n đ n gi n d truy c p.ượ ơ
C th
Các giá tr c a Fk th ng đ c l u tr trong m t b ng (m ng m t chi u ho c hai,ườ ượ ư
ba, v.v… chi u).
C n l u ý kh i tr các giá tr ban đ u c a b ng cho thích h p, đó là các k t qu c a ư ế
các bài toán con kích c nh nh t c a bài toán đang gi i:
}))0(())1(),1(({G))1(( 01
)1(
1tFdtaxmtF
d
+=
D a vào công th c, ph ng trình truy toán (*) các giá tr đã trong b ng đ tìm ươ
d n các giá tr còn l i c a b ng.
Ngoài ra còn c n m ng l u tr nghi m t ng ng v i các giá tr t i u trong t ng ư ươ ư
gian đo n.
D a vào b ng l u tr nghi m b ng giá tr t i u trong t ng giai đo n đã xây ư ư
d ng, tìm ra k t qu bài toán. ế
B cướ 3: Làm t t
Làm t t thu t toán b ng cách thu g n h th c (*) gi m kích th c mi n nh . ướ
Th ng tìm cách dùng m ng m t chi u thay cho m ng hai chi u n u giá tr m t dòng (ho cườ ế
c t) c a m ng hai chi u ch ph thu c m t dòng (ho c c t) k tr c. ướ
Trong m t s tr ng h p th thay m ng hai chi u v i các giá tr ph n t ch nh n ườ
giá tr 0, 1 b i m ng hai chi u m i b ng cách dùng k thu t qu n lý bit.
3. H n ch c a quy ho ch đ ng ế
Vi c tìm công th c, ph ng trình truy toán ho c tìm cách phân bài toán nhi u khi ươ
đòi h i s phân tích t ng h p r t công phu,d sai sót, khó nh n ra nh th nào là thích h p, đòi ư ế
h i nhi u th i gian suy nghĩ. Đ ng th i không ph i lúc nào k t h p l i gi i c a các bài toán ế
con cũng cho k t qu c a bài toán l n h n.ế ơ
Khi b ng l u tr đòi h i m ng hai, ba chi u … thì khó có th x lý d li u v i kích ư
c m i chi u l n hàng trăm.
Có nh ng bài toán không th gi i đ c b ng quy ho ch đ ng. ượ
4
B i d ng HSG – môn tin h c, tr ng THPT Cà Mau ưỡ ườ
II. M T S BÀI TOÁN QUY HO CH Đ NG ĐI N HÌNH
BÀI TOÁN 1: Đ ng điườ
Cho b ng kích th c 3 x N (1<n ướ 100). Trong m i ô có ghi m t s 1 ho c 0. B ng các
phép di chuy n U, D, L, R ng i ta đi t ô trên trái c a ườ
băng t i ô b t kỳ bên ph i nh t c a băng (c t th n).
Không đ c đi l i vào ô đã đi qua. Đ ng đi đ c đánhượ ườ ượ
giá b ng giá tr S. Ban đ u S nh n giá tr ghi ô trên trái.
Sau m i b c, giá tr c a S tăng lên g p đôi c ng v i ướ
n i dung c a ô m i đ n. Hãy tìm đ ng đi t ng ng ế ườ ươ
v i S l n nh t. Hình bên trên t ng ng v i N=5 đ ng đi c n tìm ươ ườ
RDLDRRRRULLURR.
D li u: Vào t file văn b n BANK.INP
Dòng đ u tiên ch a s nguyên N
Ba dòng sau ch a 3 xâu các ký t 0,1 xác đ nh giá tr ghi trong các ô, li t kê t trái sang
ph i, t trên xu ng d i. ướ
K t qu :ế Đ a ra file BANK.OUT m t s nguyên h th p phân là giá tr l n nh t tìm đ c c aư ượ
S
Ví d :
BANK.INP BANK.OUT
5
00011
01100
00011
RDLDRRRRULLURR
CH NG TRÌNHƯƠ
{$A+,B-,D+,E+,F-,G-,I+,L+,N+,O-,P-,Q-,R-,S+,T-,V+,X+}
{$M 16384,0,655360}
uses crt;
const
tfi = 'BANK.INP';
tfo = 'BANK.OUT';
NN = 100;
maxN = 100;
maxV = 2*(maxN+1);
maxS = 100;
type
SoNguyen=string[maxS];
var
a: array[1..3,1..maxN] of byte;
n: integer;
fi,fo: text;
CS,TT: array[1..maxV] of integer;
sTT: integer;
Tr: array[1..maxV] of integer;
S : array[1..maxV] of SoNguyen;
x: array[1..maxV] of integer;
slx: integer;
Max: SoNguyen;
AmMot,zero: SoNguyen;
procedure Sinhdl;
var ch: char;
i,j: integer;
5
0 0 0 1 1
0 1 1 0 0
0 0 0 1 1