728x90
1로 만들기
https://www.acmicpc.net/problem/1463
<코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #include <stdio.h> int Dp[1000001]; int min(int a, int b){ return a > b ? b : a; } int main(void){ int N; scanf("%d", &N); Dp[1] = 0; for (int i = 2; i <= N; i++) { Dp[i] = Dp[i - 1] + 1; if (i % 2 == 0) Dp[i] = min(Dp[i], Dp[i / 2] + 1); if (i % 3 == 0) Dp[i] = min(Dp[i], Dp[i / 3] + 1); } printf("%d\n", Dp[N]); return 0; } | cs |
<문제 푼 요령>
1. Dp 테이블에 최소값을 꾸준히 집어넣는다고 가정을 한다면
2. Dp[i]값에 최소값이 들어갈 경우는 Dp[i-1] +1, Dp[i/2] +1, Dp[i/3] +1 값을 비교해서 최소값을 넣어 주면 된다.
3. 쭉 진행해서 Dp[N]에 우리가 구하고자 하는 최소값이 들어오게 된다.
728x90
'Algorithm > DP(동적 계획법)' 카테고리의 다른 글
[백준][11727번][DP] 2xn 타일링 2 (2) | 2016.04.12 |
---|---|
[백준][11726번][DP] 2xn 타일링 (2) | 2016.04.12 |
[백준][2133번][DP] 타일 채우기 (0) | 2016.04.12 |
[백준][1520번][DP] 내리막길 (8) | 2016.04.12 |
[백준][9465번][DP] 스티커 (1) | 2016.04.12 |
댓글