Przydałby się jakikolwiek opis kodu i jego przeznaczenia, ale możemy zgadywać na ślepo:
for (int i = 0; i <= targetSum; ++i) {
dp[i] = nullopt;
}
dp[0] = {}; // dp[0] = std::vector<int>{};
Wszystkim elementom tablicy dp ustawiasz wartość na std::nullopt. Następnie pierwszemu elementowi przypisujesz wartość domyślną dla std::optional, czyli znowu std::nullopt. Nie chciałeś przypadkiem utworzyć pustego vectora?
Skoro chcesz używać tabulacji to czy nie powinieneś wstawiać liczb z wektora numbers (lub używać ich w jakiś inny sposób zgodny z zadaniem)?
if (!dp[i + num] || dp[i + num]->size() > combination->size()) {
dp[i + num] = combination;
dp[i + num]->emplace_back(num);
}