백준 1463번: 1로 만들기 /

#1463: 1로 만들기 (acmicpc.net)


첫 번째 접근은 현재 입력값에서 한 셀씩 내려서 찾으려고 했지만, 낮은 숫자와 높은 숫자를 비교할 때 낮은 숫자의 경우에만 오차가 계산되어 문제가 해결되지 않았다. 이번에는 역순으로 배열을 만들어 문제를 해결했습니다.

하나
2
4
5
6
7
8일
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#포함하다 <iostream>
#포함하다 <벡터>
사용 네임스페이스 기본;
내부 알(1000001) = { 0, 0, 0, 0};
내부 주로()
{
내부 숫자 = 0;
>> 숫자;
벡터<내부> vec;
vec.푸시백(하나);
내부= 하나;
만약에 (아니요 != 하나)
{
~하는 동안 (arr(숫자) == 0)
{
벡터<내부> vec2;
~을 위한 (자동차 이터 = vec.시작하다(); 이터 != vec.(); ++이터)
{
내부 엑스 = *이터;
만약에 (2 * 엑스 < 1000001 &&알(2 * 엑스) == 0)
{
알(2 * 엑스) = 나;
vec2.푸시백(2 * 엑스);
}
만약에 ( * 엑스 < 1000001 && 알( * 엑스) == 0)
{
알( * 엑스) = 나;
vec2.푸시백( * 엑스);
}
만약에 (엑스 + 하나 < 1000001 && 도착(X + 하나) == 0)
{
도착(X + 하나) = 나;
vec2.푸시백(엑스 + 하나);
}
}
vec. 소화 ();
vec = vec2;
++나;
}
}
쿠우트 << 도착(숫자);
돌려 주다 0;
}
CS