n개 레벨을 k개의 연속한 그룹으로 나눠 무작위 코인 뽑기 과정의 총 소요 시간 기댓값이 최소가 되게 하고, 그 값을 소수점 여섯 자리까지 출력한다.
어려움8동적 계획법분할 정복확률누적 합면접 대비아직 제출이 없습니다시간 제한2초메모리 제한512 MB아름이는 레벨 n개로 이루어진 컴퓨터 게임을 한다. 레벨에는 1번부터 n번까지 번호가 붙어 있다.
n개의 레벨은 그룹 k개로 나뉜다. 각 그룹은 연속한 레벨로 이루어지고, 모든 레벨은 정확히 한 그룹에 속하며, 빈 그룹은 없다.
게임은 다음 과정을 반복한다.
게임이 끝날 때까지 걸리는 시간의 기댓값은 레벨을 어떻게 나누는지에 따라 달라진다. n, k, t1,t2,…,tn이 주어졌을 때, 기댓값이 가장 작아지도록 나눴을 때의 기댓값을 구하는 프로그램을 작성하시오.
첫째 줄에 n과 k가 주어진다. (1≤n≤200000, 1≤k≤min(50,n))
둘째 줄에 t1,t2,…,tn이 주어진다. (1≤ti≤100000)
기댓값의 최솟값을 소수점 아래 여섯째 자리까지 반올림해 한 줄에 출력한다. 소수점 아래 자리가 모자라면 0으로 채워 항상 여섯 자리를 쓴다.
첫 번째 예제에서는 레벨 1을 한 그룹으로 두고 나머지 레벨을 다른 한 그룹으로 두는 것이 최적이다.
두 번째 예제에서는 레벨 세 개씩 두 그룹으로 나누는 것이 최적이다.