58
 правок
Изменения
Нет описания правки
Сложность алгоритма <tex>O(NW^2)</tex>.
=== Реализация ===
Сначала генерируем <tex>A</tex>. 
 for i = 0..W
   A[0][i] = 0
 for i = 0..N
   A[i][0] = 0    //Первые элементы приравниваем 0
 for k = 1..N               
   for s = 0..W   //Перебираем для каждого k, все вместисмости 
     if s >= w[k]    //Если текущий предмет вмещается в рюкзак
       A[k][s] = max(A[k-1][s], A[k-1][s-w[k]]+p[k]) //выбираем класть его или нет
     else 
       A[k][s] = A[k-1][s]             //иначе, не кладем
Затем найдем набор <tex>ans</tex> предметов, входящих в рюкзак, рекурсивной функцией:
 findAns(k, s)
   if A[k][s] == 0 
     return
   if A[k-1][s] == A[k][s]
     findAns(k-1, s)
   else 
     findAns(k-1, s - w[k]);
     ans.push(k);
