ДП - разбиение задачи на подзадачи с запоминанием результатов. Обычно таблица (слайс слайсов) или мемоизация (map). Примеры: числа Фибоначчи (F(n) = F(n-1)+F(n-2)), задача о рюкзаке, LCS, кратчайший путь. В Go: выделить слайс для состояний, заполнять в цикле или рекурсия с кешем. Порядок заполнения важен (зависимости от уже вычисленных).
dp := make([]int, n+1)
dp[0], dp[1] = 0, 1
for i := 2; i <= n; i++ { dp[i] = dp[i-1] + dp[i-2] }