주식 거래
시간 제한1초메모리 제한128 MB
n개 주식의 D일치 가격과 초기 자본 C, 최대 t번의 매매가 주어질 때 마지막 날 보유 현금의 최댓값을 구한다.
문제
주식 거래는 라스베이거스의 하이 스테이크 테이블조차 시시하게 느껴지는 사람에게 돈을 버는 좋은 방법입니다. 원리는 간단합니다. 가격이 쌀 때 사서 비쌀 때 팔면 됩니다. 문제는 다음 순간 가격이 오를지 내릴지 알 수 없다는 것입니다. 하지만 미래를 미리 안다면 문제는 훨씬 쉬워집니다. 여기서는 모든 가격을 이미 알고 있다고 가정하고, 사후적으로 최적의 투자 전략을 찾는 방법을 살펴봅니다.
총 개의 주식과 일이 있습니다. 각 날마다 모든 주식 의 가격이 주어집니다. 처음에 자본금 달러를 가지고 시작합니다. 매일, 현재 자본금을 넘지 않는 범위에서 원하는 종류의 주식을 원하는 만큼 사거나 팔 수 있습니다. 단, 한 가지 규칙이 더 있습니다. 전체 기간 동안 거래는 최대 번까지만 할 수 있습니다. 한 번의 거래란 한 종류의 주식을 사거나 파는 행위를 말합니다. 주식은 정수 단위로 거래할 필요가 없어, 예를 들어 원한다면 어떤 주식을 단위만큼 살 수도 있습니다. 같은 날 여러 종류의 주식을 사면 그만큼 여러 번의 거래를 사용합니다. 목표는 일이 끝난 뒤 손에 남은 현금의 총액을 최대화하는 것입니다. (오직 현금만 계산하며, 일이 끝난 뒤에도 들고 있는 주식은 아무 가치가 없습니다.)
입력
첫째 줄에 데이터 집합의 개수 가 주어지고, 이어서 개의 데이터 집합이 각각 다음 형식으로 주어집니다.
각 데이터 집합의 첫째 줄에는 정수 , , 와 실수 가 주어집니다. 은 주식의 개수, 은 날의 수, 은 할 수 있는 거래 횟수, 은 시작 자본금입니다.
이어서 개의 줄이 주어지며, 각 줄에는 개의 실수 이 있습니다. 는 번째 날에 주식 가 거래되는 가격입니다. 한 날의 모든 가격은 같은 줄에 나열됩니다.
출력
각 데이터 집합에 대해, 한 줄에 Data Set x:를 출력합니다. 여기서 x는 데이터 집합의 번호(부터 시작)입니다. 다음 줄에는 최대 번의 거래로 일이 끝난 뒤 가질 수 있는 최대 금액을 소수점 아래 둘째 자리까지 반올림하여 출력합니다. 연속한 데이터 집합 사이에는 빈 줄을 하나 출력합니다.