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

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

오렌지 볼

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

요약
각 플레이의 획득 야드와 성공 확률이 주어질 때, 총 획득 야드가 n 이상이 되면서 성공 확률의 곱을 최대로 하는 플레이 순서를 고른다.
난이도

보통10점 중 6점

유형
동적 계획법, 수학, 확률, 그리디
정답자
아직 제출이 없습니다

문제

오렌지 볼 미식축구 경기 종반, USC가 4점 차로 뒤지고 있어 반드시 터치다운을 하나 더 성공시켜야 한다. 그래서 감독은 프로그래밍 대회에서 작성된 새로운 무기, 곧 플레이 전략 평가기를 꺼내 든다.

미식축구는 복잡하지만 다음과 같이 단순화한다. USC는 현재 엔드존까지 nn야드 떨어져 있다(1≤n≤1001 \le n \le 100). 감독은 공을 최대한 안전하게 엔드존까지 옮길 플레이 순서를 정해야 한다. 각 플레이마다 감독은 mm가지 플레이 중 하나를 고를 수 있다(1≤m≤10001 \le m \le 1000). 각 플레이 ii는 두 수로 표현된다. 전진 야드 gig_i(정수, 1≤gi≤1001 \le g_i \le 100)와 성공 확률 pip_i(실수, 0≤pi≤10 \le p_i \le 1)이다. 플레이는 확률 pip_i로 성공하며, 성공하면 USC를 엔드존 쪽으로 gig_i야드 전진시키고, 실패하면 공격권을 잃어 USC가 패배한다.

전체 전진 야드가 nn 이상이면서 전체 성공 확률이 최대가 되도록 플레이 순서를 선택하라(같은 플레이를 반복해도 된다). 모든 플레이는 서로 독립적으로 성공하므로, 한 순서의 성공 확률은 각 플레이 확률의 곱이다.

(대회 원문의 농담: "USC가 미식축구 경기에서 뒤지는 일이 있을 리가.")

입력

첫 줄에 데이터 집합의 개수 K≥1K \ge 1이 주어진다. 이어서 KK개의 데이터 집합이 다음 형식으로 주어진다.

각 데이터 집합의 첫 줄에는 nn과 mm이 주어진다. 그 뒤로 mm개의 줄이 이어지며, ii번째 줄에는 플레이 ii의 gig_i와 pip_i가 주어진다.

출력

각 데이터 집합마다 먼저 "Data Set x:" 한 줄을 출력한다. 여기서 x는 데이터 집합의 번호(1부터 시작)이다. 그다음 줄에, 엔드존에 도달할 확률이 가장 높은 플레이 순서의 전체 성공 확률을 소수점 아래 둘째 자리까지 반올림하여 출력한다. 실제 플레이 순서는 출력할 필요가 없다.

예제3

  1. 예제 1

    입력
    2
    3 1
    1 0.7
    5 3
    1 0.94
    2 0.9
    3 0.8
    
    예상 출력
    Data Set 1:
    0.34
    Data Set 2:
    0.76
    
  2. 예제 2

    입력
    1
    1 1
    1 0.5
    
    예상 출력
    Data Set 1:
    0.50
    
  3. 예제 3

    입력
    1
    10 1
    5 1
    
    예상 출력
    Data Set 1:
    1.00