PS

종만북 dp 개론 미완

남마허 2020. 1. 14. 21:03

<dp란>

 

문제를 쪼개어 부분 문제로 나누고, 이 답들로부터 원래 문제에 대한 답을 계산하는 알고리즘

이 때, 중복된 부분 문제에 대해서는 메모이제이션을 해서 계산 시간을 줄인다.

 

<분할 정복과 비슷해 보이는데?>

 

두 개의 차이점 : 문제를 나누는 방식

 

p208 그림8.1

 

 

<시간 복잡도>

 

(존재하는 부분 문제의 수) * (한 부분 문제를 풀 때 필요한 반복문의 수행 횟수)

 

 

 

<코드>

 

dp문제를 푸는 첫 단계는 해당 문제를 재귀적으로 해결하는 완전 탐색 알고리즘을 만드는 것이다.

 

int cache[50][50];
int dp(int a, int b){
	//기저사례
	if(...) return ...;
    
    //중복방문
    int &res = cache[a][b];
    if(res != -1) return res;
    
    //답 계산
    ...
    return res;
}

int main(){
	memset(cache, -1, sizeof(cache));
}
반응형