문제 링크
- http://icpc.me/12094
사용 알고리즘
- 브루트 포스
풀이
Easy 문제 풀이에서 이어집니다.
최대 연산 횟수가 늘어났기 때문에 커팅을 조금 해야합니다.
두 가지 커팅만 해주면 AC를 받을 수 있습니다.
앞으로 K번의 이동을 더 할 수 있는데, 현재 상태에서의 최댓값이 $M / 2^K$보다 작으면 아무리 열심히 합쳐도 M보다 커질 수 없습니다. 이런 경우는 탐색할 필요가 없으므로 가지치기를 해줍니다.
특정 방향으로 이동을 했는데 보드판의 상태가 바뀌지 않았다면 재귀호출을 할 필요가 없습니다. 이런 경우에도 커팅을 해줍니다.
위 두 가지 커팅만 해주면 문제를 풀 수 있습니다.
전체 코드
1 |
|