부카조이드
면접 대비시간 제한1초메모리 제한128 MB
각 칸에 있는 bukazoid 수와 정해진 1칸·2칸 점프 횟수가 주어질 때, 모을 수 있는 bukazoid의 최댓값과 그 경로 중 사전순으로 가장 작은 방문 순서를 구한다.
문제
개의 칸이 한 줄로 놓여 있고, 각 칸에는 번부터 번까지 번호가 매겨져 있다. 먹보 로봇은 번 칸에서 출발한다. 번을 제외한 각 칸에는 부카조이드가 들어 있으며, 로봇이 어떤 칸에 도착하면 그 칸의 부카조이드를 먹는다.
로봇은 앞으로만 움직이며, 다음 두 종류의 점프만 할 수 있다.
- 한 칸 점프: 바로 다음 칸으로 이동한다(거리 ).
- 두 칸 점프: 한 칸을 건너뛴다(거리 ).
로봇은 한 칸 점프를 정확히 번, 두 칸 점프를 정확히 번 하며, 이 값들은 을 만족한다. 따라서 모든 점프를 마치면 로봇은 정확히 번 칸에 도착한다. 이동하는 동안 로봇은 도착한 모든 칸의 부카조이드를 모은다.
로봇이 모을 수 있는 부카조이드의 최대 개수를 구하여라.
입력
첫째 줄에 세 정수 (), (), ()가 주어지며, 을 만족한다.
둘째 줄에 개의 정수가 주어진다. 이는 번 칸에 들어 있는 부카조이드의 개수를 순서대로 나타내며, 각 값은 이상 이하이다.
출력
첫째 줄에 모을 수 있는 부카조이드의 최대 개수를 출력한다.
둘째 줄에는 이 최댓값을 달성하는 경로로, 로봇이 지나는 칸 번호 개를 번 칸부터 순서대로 출력한다. 최댓값을 달성하는 경로가 여러 개이면, 칸 번호 수열이 사전순으로 가장 앞서는 것을 출력한다(두 수열을 앞에서부터 위치별로 비교하여, 처음으로 달라지는 위치에서 값이 더 작은 쪽이 앞선다).