아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

카드 등급 부호화

시간 제한3초메모리 제한128 MB

요약
네 가지 카드 등급의 확률이 주어질 때 N회 뽑기 결과를 나타내는 최적 이진 코드의 최소 기대 길이를 구합니다.
난이도

어려움10점 중 9점

유형
그리디, 힙, 확률, 조합론
정답자
아직 제출이 없습니다

문제

한 카드 게임에서는 골드를 내고 카드를 한 장씩 뽑는다. 뽑은 카드의 등급은 다음 네 가지 중 하나이고, 어느 등급이 나올지는 무작위로 정해진다.

  • 일반 카드
  • 희귀 카드
  • 영웅 카드
  • 전설 카드

샤바칸은 골드를 모아 카드 NN장을 뽑는다. 샤바칸은 뽑은 순서대로 적은 등급 NN개짜리 나열을 이진 문자열 하나로 나타내려 한다. 가능한 등급 나열은 4N4^N가지이므로 이 4N4^N가지에 이진 문자열을 하나씩 대응시켜야 한다. 문자열이 어디서 끝나는지 알아볼 수 있어야 하므로, 대응시킨 4N4^N개의 문자열 중 어느 것도 다른 문자열의 접두사가 되어서는 안 된다.

카드 한 장의 등급 확률분포가 주어지면 등급 나열마다 확률이 정해진다. 따라서 대응 방법을 하나 고르면 샤바칸이 쓰게 될 이진 문자열의 길이의 기댓값도 정해진다. 이 기댓값은 대응 방법에 따라 달라진다.

등급 확률분포가 주어질 때, 이진 문자열 길이의 기댓값을 가장 작게 만드는 대응 방법에서의 그 기댓값을 구하시오.

입력

첫째 줄에 뽑는 카드의 수 NN (1≤N≤201 \le N \le 20)이 주어진다.

둘째 줄에 카드 한 장이 일반, 희귀, 영웅, 전설 등급으로 나올 확률 PCP_C, PRP_R, PEP_E, PLP_L이 공백으로 구분되어 주어진다. 네 값은 모두 0 이상 1 이하이고 PC+PR+PE+PL=1P_C + P_R + P_E + P_L = 1이다. 확률이 0인 등급이 있어도 그 등급이 들어간 나열에 이진 문자열을 대응시켜야 한다.

출력

첫째 줄에 이진 문자열 길이의 기댓값의 최솟값을 소수점 아래 여섯째 자리까지 반올림하여 출력한다.

예제3

  1. 예제 1

    입력
    2
    0.9 0.049999 0.05 0.000001
    
    예상 출력
    1.457510
    
  2. 예제 2

    입력
    20
    0.25 0.25 0.25 0.25
    
    예상 출력
    40.000000
    
  3. 예제 3

    입력
    1
    0.25 0.25 0.25 0.25
    
    예상 출력
    2.000000