Для начала это объявление
std::vector<std::vector<int>>* memo;
не имеет большого смысла. Было бы лучше объявить элемент данных как
std::vector<std::vector<int>> memo;
Это распределение
memo = new std::vector<std::vector<int>>(m, *new std::vector<int>(n, 0));
Неверно. Элементы вектора не являются указателями. Вы должны написать
memo = new std::vector<std::vector<int>>(m, std::vector<int>(n, 0));
или
memo = new std::vector<std::vector<int>>(m, std::vector<int>(n ));
Кажется, это является причиной других ваших проблем.
Чтобы установить значение для такого вектора, вы должны написать например
( *memo )[i][j] = ans;
Если объявить элемент данных не указателем, как, например,
std::vector<std::vector<int>> memo;
, то в функции вы можете назначить его как
memo.assign( m, std::vector<int>( n ) );