양동이 고르기


답안 제출

Points: 9
시간 제한: 2.0s
메모리 제한: 256M

문제 유형
허용된 언어
C, C++, Python

제한 칼로리 C와 B개의 사료 양동이가 주어집니다. 각 양동이는 고유한 칼로리를 가지고 있습니다.

제한 칼로리 C를 초과하지 않으면서 선택한 양동이들의 칼로리 합을 최대로 만드는 프로그램을 작성하시오.

최댓값을 만드는 조합이 여러 개라면, 그중 사전순으로 가장 앞서는 조합(선택한 양동이의 번호들을 나열했을 때, 앞 번호의 양동이가 더 많이 포함된 조합)을 출력합니다.

입력

첫째 줄에 하루 최대 제한 칼로리 C와 사료 양동이의 개수 B가 공백을 사이에 두고 주어진다.

둘째 줄에 각 양동이의 칼로리가 입력 순서대로 B개만큼 공백으로 구분되어 주어진다. (양동이의 번호는 입력된 순서대로 1번부터 B번까지 부여됩니다.)

출력

첫째 줄에 제한 칼로리를 넘지 않는 칼로리 합의 최댓값을 출력한다.

둘째 줄에 최댓값을 만들기 위해 선택한 양동이들의 번호를 공백으로 구분하여 오름차순으로 출력한다.

아무것도 고르지 않는 것이 최선이라면 0을 출력한다.

제한 사항

  • 10 ≤ C ≤ 35,000
  • 1 ≤ B ≤ 21
  • 각 양동이의 칼로리는 1 이상 35,000 이하의 자연수이다.

예제 입력 1

40 6
7 13 17 19 29 31

예제 출력 1

39
1 2 4

예제 설명 1

1번(7), 2번(13), 4번(19) 양동이를 고르면 합이 7 + 13 + 19 = 39가 되어 제한 조건 40을 넘지 않는 최댓값이 됩니다.


코멘트

현재 작성된 코멘트가 없습니다.