2 MËT SÈ BI TON QUY HOCH ËNG
2.3 B i to¡n c¡i tói
B i to¡n: Mët cûa h ng b¡n ç trang sùc câ n mân h ng (n ≤ 100), mân h ng thù i câ trång l÷ñng l W[i] ≤ 100 v trà gi¡ V[i] ≤ 100
(sè nguy¶n). Mët t¶n trëm mang theo mët chi¸c tói câ thº üng ÷ñc tèi a trång l÷ñng M ( M ≤ 100). Häi t¶n trëm â s³ l§y nhúng mân h ng n o º ÷ñc têng gi¡ trà lîn nh§t. Bi¸t r¬ng méi mân ch¿ ÷ñc chån ho°c khæng chån.
Input: file v«n b£n BIGBAG.INP
. Dáng 1: Chùa hai sè n, M c¡ch nhau ½t nh§t mët d§u c¡ch.
. n dáng ti¸p theo, dáng thù i chùa hai sè nguy¶n d÷ìng W[i], V[i] c¡ch nhau ½t nh§t mët d§u c¡ch.
Output: file v«n b£n BIGBAG.OUT
. Dáng 1 : Ghi gi¡ trà lîn nh§t t¶n trëm câ thº l§y.
. Dáng 2 : Ghi ch¿ sè nhúng bà l§y.
H¼nh 2.8:
C¡ch gi£i: N¸u gåi F[i, j] l gi¡ trà lîn nh§t câ thº câ b¬ng c¡ch chån trong c¡c gâi 1,2, . . . , i vîi giîi h¤n trång l÷ñng j. Th¼ gi¡ trà lîn nh§t khi ÷ñc chån trong sè n gâi vîi giîi h¤n trång l÷ñng M ch½nh l
F[n, M]. V½ dö F[4,10] = 8, ngh¾a l trong tr÷íng hñp tèi ÷u têng gi¡ trà cõa c¡c mân h ng ÷ñc chån l 8, khi câ 4 mân ¦u ti¶n ÷ñc chån (tø mân 1 ¸n mân 4) v khèi l÷ñng tèi a cõa tói l 10.
Cæng thùc truy hçi t½nh F[i, j]: Vîi giîi h¤n trång l÷ñng j, vi»c chån tèi ÷u trong sè c¡c gâi 1,2, . . . , i−1, i º câ gi¡ trà lîn nh§t s³ câ hai kh£ n«ng:
∗ N¸u khæng chån gâi thù i th¼ F[i, j] l gi¡ trà lîn nh§t câ thº b¬ng c¡ch chån trong sè c¡c gâi 1,2, . . . , i−1 vîi giîi h¤n trång l÷ñng l j. Tùc l
F[i, j] = F[i−1, j]
∗ N¸u câ chån gâi thù i (t§t nhi¶n ch¿ x²t tîi tr÷íng hñp n y khi m W[i] ≤ j) th¼ F[i, j] b¬ng gi¡ trà gâi thù i l V[i] cëng vîi gi¡ trà lîn nh§t câ thº câ ÷ñc b¬ng c¡ch chån trong sè c¡c gâi
1,2, . . . , i−1 vîi giîi h¤n trång l÷ñng j −W[i]. Tùc l v· m°t gi¡ trà thu ÷ñc:
F[i, j] = V[i] +F[i−1, j−W[i]] V¼ theo c¡ch x¥y düng F[i, j] l gi¡ trà lîn nh§t câ thº, n¶n F[i, j] s³ l max trong 2 gi¡ trà thu ÷ñc ð tr¶n.
Cì sð quy ho¤ch ëng: D¹ th§y F[0, j] = 0, gi¡ trà lîn nh§t câ thº b¬ng c¡ch chån trong sè 0 gâi.
T½nh b£ng ph÷ìng ¡n: B£ng ph÷ìng ¡n F gçm n+ 1 dáng, M + 1
cët, tr÷îc ti¶n ÷ñc i·n cì sð quy ho¤ch ëng: Dáng 0 gçm to n sè 0. Sû döng cæng thùc truy hçi, dòng dáng 0 t½nh dáng 1, dòng dáng 1 t½nh dáng 2, v.v. . . ¸n khi t½nh h¸t dáng n.
Truy v¸t: T½nh xong b£ng ph÷ìng ¡n th¼ ta quan t¥m ¸n F[n, M]
â ch½nh l gi¡ trà lîn nh§t thu ÷ñc khi chån trong c£ n gâi vîi giîi h¤n trång l÷ñng M. N¸u F[n, M] = F[n−1, M] th¼ tùc l khæng chån gâi thù n, ta truy ti¸p F[n−1, M]. Cán n¸u F[n, M] 6= F[n−1, M]
th¼ ta thæng b¡o r¬ng ph²p chån tèi ÷u câ chån gâi thù n v truy ti¸p
F[n−1, M −W[n]]. Cù ti¸p töc cho tîi khi truy l¶n tîi h ng 0 cõa b£ng ph÷ìng ¡n.
H¼nh 2.9:
program Lucky_Bag;
const
InputFile = 'BIGBAG.INP';
OutputFile = 'BIGBAG.OUT'; max = 100; var
W, V: Array[1..max] of Integer; F: array[0..max, 0..max] of Integer; n, M: Integer; procedure Enter; var i: Integer; fi: Text; begin Assign(fi, InputFile); Reset(fi); ReadLn(fi, n, M);
for i := 1 to n do ReadLn(fi, W[i], V[i]); Close(fi);
end;
procedure Optimize; var
i, j: Integer; begin FillChar(F[0], SizeOf(F[0]), 0); for i := 1 to n do for j := 0 to M do begin F[i, j] := F[i - 1, j];
if (j >= W[i]) and (F[i, j] < F[i - 1, j - W[i]] + V[i]) then F[i, j] := F[i - 1, j - W[i]] + V[i];
end; end; procedure Trace; var fo: Text; begin
Assign(fo, OutputFile); Rewrite(fo); WriteLn(fo, F[n, M]); while n <> 0 do begin if F[n, M] <> F[n - 1, M] then begin Write(fo, n, ' '); M := M - W[n]; end; Dec(n); end; Close(fo); end; begin
Enter; Optimize; Trace; end.
KT LUN
Khâa luªn t¼m hiºu v· ph÷ìng ph¡p quy ho¤ch ëng v sû döng º gi£i b i to¡n tèi ÷u. K¸t qu£ ch½nh ¤t ÷ñc Khâa luªn l :
1. Tr¼nh b y c¡c ki¸n thùc cì b£n v· » quy (cæng thùc truy hçi, c i °t » quy, mët sè b i to¡n mang b£n ch§t » quy), b i to¡n tèi ÷u v ph÷ìng ph¡p quy ho¤ch ëng.
2. Tr¼nh b y v· gi£i mët sè b i to¡n sû döng ph÷ìng ph¡p quy ho¤ch ëng cì b£n: D¢y con ìn i»u t«ng d i nh§t, B i to¡n c¡i tói, Bi¸n êi x¥u.
V¼ thíi gian câ h¤n n¶n trong Khâa luªn khæng tr¡nh khäi sai sât. Em r§t mong nhªn sü âng gâp, þ ki¸n cõa c¡c th¦y cæ gi¡o v c¡c b¤n º khâa luªn ÷ñc ho n thi»n.
[1] Hç S¾ m(Chõ bi¶n, 2000), Mët sè ph÷ìng ph¡p gi£i b i to¡n trong tin håc, NXB Giaâ döc.
[2] L¶ Minh Ho ng (2014), Gi£i thuªt v lªp tr¼nh, Book online [3] Nguy¹n Quþ Khang, Ki·u V«n H÷ng (2002), B i tªp Pascal (tªp
2), NXB ¤i håc Quèc gia H Nëi.
[4] Robert Sedgewick (2004), C©m nang thuªt to¡n (tªp 1), NXB Khoa håc Kÿ thuªt
[5] Nguy¹n ùc Ngh¾a, Nguy¹n Tæ Th nh(2006), To¡n ríi r¤c, NXB NXB ¤i håc Quèc gia H Nëi.