어떤 제한 조건이 있는 경우에 무언가를 최적화할 때 유용하다. 문제를 더 작은 하위 문제로 풀고, 이 하위 문제를 푼 결과를 이용해 더 큰 문제를 푸는 방법이다. 하위 문제들이 서로 관계가 없을 때, 즉 서로 의존하지 않는 경우에만 사용할 수 있다. 문제를 풀 때 격자를 사용한다. 격자의 각 칸에는 최적화하려는 값을 쓴다. 격자의 각 칸은 하위 문제를 뜻한다. 그러므로 원래의 문제를 어떻게 하위 문제로 나눌 수 있는지 생각해야 한다.