근무 중 수면
시간 제한1초메모리 제한256 MB
N분 가운데 정확히 M분을 R분 이하로 끊어 자면서 연속 수면의 k번째 분 기운을 k배로 더한 합이 가장 커지도록 구합니다.
- 난이도
보통10점 중 6점
- 유형
- 동적 계획법
- 정답자
- 아직 제출이 없습니다
문제
회사에서 근무하는 중인데, 퇴근하자마자 프로그래밍 대회가 열린다. 좋은 성적을 내려면 근무 시간에 잠을 자서 체력을 최대한 회복해야 한다.
근무 시간은 분이고, 인 에 대해 번 분의 회복량은 다. 자야 하는 시간은 정확히 분이다. 다만 한 번에 분을 넘겨 자면 상사가 알아채므로, 이어서 자는 구간의 길이는 최대 분이다. 서로 다른 두 수면 구간 사이에는 깨어 있는 분이 적어도 하나 있다. 두 구간이 붙어 있으면 하나의 긴 구간이다.
이어서 자면 보너스가 붙는다. 한 구간에서 번째로 자는 분은 회복량이 배가 된다. 예를 들어 회복량이 인 세 분을 이어서 자면 만큼 회복한다.
분을 다 자면 완전히 회복되어 그날은 더 잘 수 없다. 잠은 시계의 분이 바뀌는 순간에만 시작하고 끝낼 수 있다.
하루 동안 회복할 수 있는 체력의 최댓값을 구하는 프로그램을 작성하라.
입력
첫 줄에 테스트 케이스의 개수 가 주어진다.
각 테스트 케이스의 첫 줄에는 근무 시간 , 자야 하는 시간 , 한 번에 이어서 잘 수 있는 최대 시간 이 공백으로 구분되어 주어진다. 둘째 줄에는 개의 정수 이 공백으로 구분되어 주어진다.
출력
각 테스트 케이스마다 한 줄에, 정확히 분을 자서 얻을 수 있는 회복량의 최댓값을 출력한다. 분을 자는 것이 불가능하면 impossible을 출력한다.