부카조이드

면접 대비

시간 제한1초메모리 제한128 MB

요약
각 칸에 있는 bukazoid 수와 정해진 1칸·2칸 점프 횟수가 주어질 때, 모을 수 있는 bukazoid의 최댓값과 그 경로 중 사전순으로 가장 작은 방문 순서를 구한다.
난이도

보통10점 중 4점

유형
동적 계획법, 그리디, 배열, 구현
정답자
아직 제출이 없습니다

문제

n+1n+1개의 칸이 한 줄로 놓여 있고, 각 칸에는 00번부터 nn번까지 번호가 매겨져 있다. 먹보 로봇은 00번 칸에서 출발한다. 00번을 제외한 각 칸에는 부카조이드가 들어 있으며, 로봇이 어떤 칸에 도착하면 그 칸의 부카조이드를 먹는다.

로봇은 앞으로만 움직이며, 다음 두 종류의 점프만 할 수 있다.

  • 한 칸 점프: 바로 다음 칸으로 이동한다(거리 11).
  • 두 칸 점프: 한 칸을 건너뛴다(거리 22).

로봇은 한 칸 점프를 정확히 mm번, 두 칸 점프를 정확히 kk번 하며, 이 값들은 m+2k=nm + 2k = n을 만족한다. 따라서 모든 점프를 마치면 로봇은 정확히 nn번 칸에 도착한다. 이동하는 동안 로봇은 도착한 모든 칸의 부카조이드를 모은다.

로봇이 모을 수 있는 부카조이드의 최대 개수를 구하여라.

입력

첫째 줄에 세 정수 nn (1≤n≤1001 \le n \le 100), mm (0≤m≤1000 \le m \le 100), kk (0≤k≤1000 \le k \le 100)가 주어지며, m+2k=nm + 2k = n을 만족한다.

둘째 줄에 nn개의 정수가 주어진다. 이는 1,2,…,n1, 2, \dots, n번 칸에 들어 있는 부카조이드의 개수를 순서대로 나타내며, 각 값은 00 이상 100100 이하이다.

출력

첫째 줄에 모을 수 있는 부카조이드의 최대 개수를 출력한다.

둘째 줄에는 이 최댓값을 달성하는 경로로, 로봇이 지나는 칸 번호 m+k+1m + k + 1개를 00번 칸부터 순서대로 출력한다. 최댓값을 달성하는 경로가 여러 개이면, 칸 번호 수열이 사전순으로 가장 앞서는 것을 출력한다(두 수열을 앞에서부터 위치별로 비교하여, 처음으로 달라지는 위치에서 값이 더 작은 쪽이 앞선다).

예제2

  1. 예제 1

    입력
    5 1 2
    5 2 7 3 1
    
    예상 출력
    13
    0 1 3 5
    
  2. 예제 2

    입력
    3 1 1
    5 5 4
    
    예상 출력
    9
    0 1 3