Best Sum with Tabulation

Updated: 01 February 2024

Problem

The same problem as the Memoization Best problem but we want to take a tabular approach which we can do as an adaptation of the Tabular Can How Sum problem but this time we replace each sub-sum with the shortest sum of the given options

Tabulation Implementation

The implementation of this can be seen below:

dynamic-programming/tabulation/best-sum.ts
export const bestSum = (target: number, nums: number[]): number[] | null => {
  const table = new Array<number[] | null>(target + 1).fill(null);
  table[0] = [];

  for (let index = 0; index <= target; index++) {
    const element = table[index];

    if (element) {
      for (const num of nums) {
        const nextIndex = index + num;
        if (nextIndex in table) {
          const nextValue = [...element, num];

          const currentValue = table[nextIndex];

          if (currentValue === null || currentValue.length > nextValue.length)
            table[nextIndex] = nextValue;
        }
      }
    }
  }

  return table[target];
};

In the above, the time complexity $O(m^2 *n)$ and space complexity $O(m^2)$

The reason we say $m^2$ and not $m$ in the time complexity is because of the array copy operation that we do to assign the latest value