Dinaminis programavimas: Skirtumas tarp puslapio versijų

173 pridėti baitai ,  prieš 15 metų
+programos fragmentas
(+knapscak)
(+programos fragmentas)
*Iš šių dviejų atvejų, pasirenkme vertingesnį.
 
Taigi, problemą <math>J</math> daiktų atveju galime išspresti, jeigu žinome problemos <math>J-1</math> daiktų daiktų atveju sprendimą. Matematiškai tai atrodo taip: <math>F(j, k) = max(F(j-1, k), F(j-1, k-D_j) + V(j))</math>. Sprendimą galima rasti, ieškant nuo apačios, t.y. pirma apskaičiuojant <math>F</math> reikšmes su mažesnėmis <math>J</math> reikšmėmis. Taip pat, būtina atkreipti dėmesį, kad būtina turėti tam tikras "ribines" reikšmes. Šiuo atveju tai būtų: <math>F(0,\ k) = 0</math>.
 
Programos fragmentai:
 
for J := 1 to N do
begin
F[J, K] := F[J-1, K];
if D[J] <= K then
V[J, K] := Max(V[J, K], V[J-1, K-D[J]] + V[J]);
end;
160

pakeitimų