매일의 호텔 가격과 K포인트당 무료 숙박 하나라는 보상 규칙이 주어질 때, 전체 여행의 최소 총비용을 구한다.
보통7동적 계획법그리디힙아직 제출이 없습니다시간 제한2초메모리 제한512 MB유럽을 여행하며 N일 동안 매일 밤 다른 도시에서 묵으려고 한다. 도시마다 묵을 호텔은 이미 정해 두었으므로, i번째 밤에 묵을 방의 가격 Pi를 모두 알고 있다 (i=1,2,…,N).
숙소는 적립 제도를 운영하는 예약 사이트에서 예약한다. 이 사이트로 예약한 호텔에서 하룻밤을 묵으면 적립금이 1점 쌓인다. 적립금이 K점 이상 모이면 언제든 K점을 써서 아무 호텔에서나 하룻밤을 공짜로 묵을 수 있다. 다만 공짜로 묵은 밤에는 적립금이 쌓이지 않는다.
예를 들어 N=6, K=2이고 가격이 P1=10, P2=3, P3=12, P4=15, P5=12, P6=18인 경우를 보자. 앞의 네 밤을 모두 돈을 내고 묵으면 적립금 4점이 쌓이고, 이것으로 남은 두 밤을 공짜로 묵어 숙박비 P1+P2+P3+P4=40을 낸다. 그런데 세 밤을 묵어 얻은 3점 중 2점을 네 번째 밤에 쓰면, 다섯 번째 밤은 돈을 내고 묵으면서 남은 2점으로 여섯 번째 밤을 공짜로 해결할 수 있다. 이때 숙박비는 P1+P2+P3+P5=37이라 더 싸다.
숙박비 합계의 최솟값을 구하는 프로그램을 작성하라. 묵으려는 호텔에는 항상 빈 방이 있고, 도시를 방문하는 순서는 바꿀 수 없다.
첫째 줄에 여행하는 밤의 수 N과 공짜 숙박 한 번에 필요한 적립금 K가 공백을 사이에 두고 주어진다 (1≤N,K≤105).
둘째 줄에 N개의 정수 P1,P2,…,PN이 공백을 사이에 두고 주어진다. Pi는 i번째 밤에 묵을 방의 가격이다 (1≤Pi≤104).
숙박비 합계의 최솟값을 한 줄에 출력한다.