-
배수 공사Algorithm/BOJ 2020. 3. 7. 05:5912345678910111213141516171819202122232425262728293031323334353637383940//15817 - 배수공사#include <iostream>using namespace std;int N, K;int arr[100];int arr2[100];int cache[100][10001];void init(){cin >> N >> K;for(int i = 0; i<N; ++i)cin >> arr[i] >> arr2[i];for(int i = 0; i<N; ++i)for(int j = 0; j<=K; ++j)cache[i][j] = -1;}int dp(int idx, int length){if(length == K)return 1;if(length > K) return 0;if(idx == N) return 0;int& ret = cache[idx][length];if(ret != -1)return ret;ret = 0;for(int num = 0; num <= arr2[idx]; ++num)ret += dp(idx+1, length + arr[idx]*num);return ret;}int main(){init();cout << dp(0, 0);}
cs 15817번: 배수 공사
합친 파이프의 길이 x를 만들 수 있는 방법의 수를 출력한다. 방법의 수가 2,147,483,647를 넘는 경우는 없다.
www.acmicpc.net
배수 공사
재귀함수에 메모이제이션을 사용했습니다.
dp(idx, length) : length길이까지 파이프를 만들었고, 현재 idx번째 파이프를 사용할 차례
'Algorithm > BOJ' 카테고리의 다른 글
버블 소트 - 1517 (0) 2020.03.08 정상 회담 2 - 1670 (0) 2020.03.08 천재 수학자 성필 - 15815 (0) 2020.03.07 야뱌위 대장 - 15814 (0) 2020.03.07 너의 이름은 몇 점이니? - 15813 (0) 2020.03.07