Пример #1
0
  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');
  }
Пример #2
0
  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] + " ");
  }