public static void MaxSumIncSubseqDP(int[] elems) { int totalMax = 0; int L[] = new int[elems.length]; int track[] = new int[elems.length]; for (int i = 0; i < elems.length; i++) { L[i] = elems[i]; track[i] = i; } for (int i = 1; i < elems.length; i++) { for (int j = 0; j < i; j++) { if (elems[j] < elems[i] && L[i] < elems[i] + L[j]) { L[i] = elems[i] + L[j]; track[i] = j; } } if (totalMax < L[i]) { totalMax = L[i]; } } System.out.println(totalMax); printTrack(indexMax, elems, track); System.out.println('\n'); }
public static void printTrack(int index, int[] elems, int[] track) { if (index == track[index]) { System.out.print(elems[index] + " "); return; } printTrack(track[index], elems, track); System.out.print(elems[index] + " "); }