Размер набора всех подмножеств цифр равен 2 ^ 10.
Учитывая номер, вы можете хранить table[digits used]=value
.
Учитывая таблицу с некоторыми записями и номером, вы можете для каждой записи определить, можете ли вы использовать этот номер. Если это так, вы добавляете table[old digit and digits from number]=new sum
, если там еще нет записи с более высоким значением. При этом учитывайте тот факт, что table[no digits]=0
.
Это займет O (2 ^ n) времени для ввода O (n), так как записи таблицы растут экспоненциально, но не более, чем O (n * 1024), поскольку экспоненциальный рост записей не может превышать заполнение всей таблицы. .
Наивно, таблица может быть реализована как std::unordered_map< unsigned char, unsigned int >
с использованием битовых масок.
Это решение для динамического программирования.