dp[k][i] 를 채우기 위해서는 dp[k'][i-1] (0<=k'<=k)의 값이 필요합니다.
즉, dp[k][i] 를 채우기 위해서 dp[k'][0~i-2] 에 있는 값은 필요가 없다는 사실을 이용하여
다이나믹 배열을 모듈라 연산을 통해 dp[10001][2] 로 줄일 수 있습니다.
dp[i][k] = sum(dp[i-1][k') <=> dp[i%2][k] = sum(dp[(i-1)%2][k'] (모듈라 연산 이용)
슬라이딩 윈도우 기법으로 검색해보세요
sgc109 8년 전
동전의 단위를 입력받아 내림차순 정렬을 하고 큰 단위의 동전부터 최대 사용가능 개수부터 0개까지 하나씩줄여가며 그 아래 단위에도 재귀적으로 조합하여 가장 마지막 단위까지 도달했을때 합이 만들고자하는 금액 k 와 같다면 세는 식으로 해서 계산하게했고
D(i,j) = 현재까지 i원을 만들었고 개수를 정해야하는 단위가 coin[j] 일때 최종금액 k를 만드는것이 가능한 경우의 수
로 하여 계산을 하고자했는데 메모리제한이 4MB 인데 unsigned int dp[10000][100] 만 해도 4MB 가 되어 메모리 초과가 뜹니다.. 어떻게 개선하면 좋을까요?
@hongjun7