единичную subset sum конструктивно я умею решать (относительно) быстро. Т.е. могу найти какое-то одно решение за O(S) памяти и (кажется) за O(n*S) времени
Я, кстати, вроде легко одну в другую перекодирую. Действительно, каждое число si кодирует возможность выбрать один из трех векторов (si, 0, 0), (0, si, 0), (0, 0, si)
Любой вектор может быть записан на базисе 10^(2n), 10^(n), 1
Выбор одного из трёх может быть записан умножением всего множества на 3^n с последующей записью 1 в соответствующий трит