Я пытаюсь полностью понять динамическое программирование, поэтому я взял проблему с обычной суммой подмножества немного дальше, и я пытаюсь посмотреть, могу ли я распечатать все подмножества, добавляемые к определенному числу. На данный момент я сделал это рекурсивно, но я хотел бы выяснить, как это сделать динамически. Любая помощь приветствуется. Вот то, что я сейчас:найти все наборы списка, которые добавляются к определенному яберу с динамическим программированием
import java.util.ArrayList;
import java.util.HashMap;
import com.sun.xml.internal.bind.v2.schemagen.xmlschema.List;
public class subsetSum {
public static void main (String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(3);
list.add(4);
list.add(0);
printSublists(list, list, 4, true, 0);
}
public static Integer sum(ArrayList<Integer> list) {
Integer sum= 0;
for (Integer i:list)
sum = sum + i;
return sum;
}
public static void printSublists(ArrayList<Integer> list, ArrayList<Integer> list2, int n, boolean walkRight, int level) {
if (sum(list2) == n)
System.out.println(list2);
if (list2.size() == 1)
return;
if (walkRight)
printSublists(list, new ArrayList<Integer>(list2.subList(0, list2.size()-1)), n, walkRight, level+1);
walkRight = false;
printSublists(list, new ArrayList<Integer>(list2.subList(1, list2.size())), n, walkRight, level+1);
}
}
См. Мой ответ на http://stackoverflow.com/a/25535846/585411 для объяснения принципа, лежащего в основе решения этой проблемы. – btilly
@btilly, я понимаю концепцию, и я пытаюсь выполнить этот процесс, но я не могу понять, какой код для работы – seanscal