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