-
DP_백준_1로 만들기_1463Algorithm 2018. 8. 15. 19:44
1. dp[n] : 연산 3 개를 사용하여 n을 1을 만들때 연산 사용 횟수의 최솟값.
2. 점화식 : dp[n] = min(dp[n/3], dp[n/2], dp[n-1]) +1
3. 초기화 : dp[0] = 0, dp[1] =0
시간 복잡도 : O(N)
N을 - - - 해서 변형을 해서 1로 만든다.
12345678910111213141516171819202122232425262728293031323334353637383940#include <iostream>using namespace std;int d[1000001];int dp(int num) {int tmp;if (num <= 1) {return 0;} // Exception Handlingif (d[num] > 0) {return d[num];} // Memoizationd[num] = dp(num - 1) + 1;if (num % 2 == 0) {tmp = dp(num / 2) + 1;if (tmp < d[num]) {d[num] = tmp;}}if (num % 3 == 0) {tmp = dp(num / 3) + 1;if (tmp < d[num]) {d[num] = tmp;}}return d[num];// min(dp[n/3], dp[n/2], dp[n-1])}int main() {d[0] = 0;d[1] = 0;//Initializeint input;cin >> input;cout << dp(input) << endl;return 0;}cs 'Algorithm' 카테고리의 다른 글
DP_백준_2*n타일링2_11727 (0) 2018.08.15 DP_백준_2*n타일링_11726 (0) 2018.08.15 DP_백준_이론 (0) 2018.08.15 문자열_백준 (0) 2018.08.15 큐_백준_조세퍼스 문제_1158 (0) 2018.08.15