0
는 숫자 X를 감안할 때 1 (변형)에 N을 줄이기 위해 :최소 단계는 이러한 작업 중 하나를 수행 할 수 있습니다,
1 씩 감소 X 1.
2 증가 X에 의해 1.
3의 경우 X는 3의 배수가 당신에 의해 X를 나눌 수 있습니다 3.
나는이 문제에 대한 O (n)의 DP 솔루션이 있다고 생각하지만, 어떻게 1 < = X <을 위해 그것을 해결하기 = 10^9? (N은 ~ 3^N, 그것이 ~ 걸리면 2N 간다)
이것은 조정할 필요하다면 N의 경우 (N == 2) {N '등 == 2 -, NC++; –
답장을 보내 주셔서 감사합니다. 그러나 왜이 알고리즘이 항상 최적의 솔루션을 제공하는지 설명해 주시겠습니까? – ahmedgu
그것은 3의 가장 가까운 배수로 간다는 점에서 욕심이 많습니다. 3x + 1 및 3^ky-2라고하면, 기본 조작의 수가 동일합니다. 코드가 3x로 이동 한 다음 x로 이동합니다. 그러나 3^ky에 도달하기 위해 두 번 추가하고 y (k + 2 개의 움직임)에 도달하기 위해 k 개의 분할을 추가한다고하더라도, x는 3^{k-1} y-1 (3x = 3^ky -3, 양쪽에 +1을 더함) k + 2도 움직입니다. 마찬가지로 3x-1과 3^k + 2 사이에 끼워진 경우 n = 2를 치면 2-> 3-> 1이 아니라 1로 바로 가십시오. –