Решение
, если вы можете использовать C ++ 11, используйте
constexpr int max = 20;
или если вы не можете использовать C ++ 11, используйте
const int max = 20;
И не пропускайте пространство имен, чтобы избежать двусмысленности:
lookup[i][j] = std::max(lookup[i - 1][j], lookup[i][j - 1]);
Объяснение
У вас есть макрос
#define max 20
Теперь препроцессор - довольно глупый инструмент для замены текста теперь это заменит каждый экземпляр "max" на "20". Таким образом, вы получите
lookup[i][j] = 20(lookup[i - 1][j], lookup[i][j - 1]);
Что не имеет никакого смысла. Яркий пример, почему вы не должны использовать макросы в современном C ++;)