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

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

팬케이크맛 쿠키

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

요약
능력 게이지가 있는 맵에서 쿠키가 젤리를 가장 많이 모으도록 능력을 사용할 시점을 정하는 문제입니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 시뮬레이션, 그리디
정답자
아직 제출이 없습니다

문제

쿠키런 오븐브레이크는 점프와 슬라이드로 젤리를 최대한 많이 획득해 최대 점수를 얻는 게임이다. 스탠딩벨은 가장 좋아하는 팬케이크맛 쿠키의 설정값(maxCmaxC, uu, dd)을 바꿔 가며 점수가 얼마나 변하는지 실험하기로 했다.

팬케이크맛 쿠키를 실험하기 위해 가로 w+1w+1, 세로 h+1h+1 크기의 맵에서 아래 조건에 따라 플레이한다.

  • 생성되는 맵의 가장 왼쪽 아래 좌표는 (0,0)(0,0)이고, 가장 오른쪽 위 좌표는 (h,w)(h,w)이다.
  • 쿠키의 시작 위치는 (0,0)(0,0)이고, 초기 시간은 00, 초기 점수는 00이다.
  • 팬케이크맛 쿠키는 1초에 x 좌표가 1칸씩 이동한다.
  • 능력을 사용하면 uu만큼 떠오른다. 현재 위치가 (x,y)(x, y)이면 직선 경로로 (x+1,y+u)(x+1, y+u)까지 이동한다. 이동하는 중 y+uy+u가 설정된 높이 hh보다 커지면 높이는 hh로 유지된다.
  • 능력을 사용하지 않으면 dd만큼 가라앉는다. 현재 위치가 (x,y)(x, y)이면 직선 경로로 (x+1,y−d)(x+1, y-d)까지 이동한다. 이동하는 중 y−dy-d가 설정된 바닥인 00보다 작아지면 높이는 00으로 유지된다.
  • 능력을 사용할 때마다 능력치가 1 줄어든다.
  • 능력을 사용하지 않은 경우 능력치가 1 회복된다.
  • 능력치는 maxCmaxC를 넘을 수 없고, 능력치가 00이면 능력을 사용할 수 없다.
  • 팬케이크맛 쿠키는 자신의 위치와 그 아래에 있는 젤리를 모두 먹는다.

이제 이 실험 환경에서 능력치 maxCmaxC, uu, dd를 조절하며 팬케이크맛 쿠키의 밸런스를 맞춰 보자. 아래 예시는 w=4w=4, h=5h=5, u=3u=3, d=1d=1, maxC=2maxC=2로 설정된 맵에서 시점 tt별 PanCakeCookie 클래스의 정보이다.

밸런스는 쿠키가 얻을 수 있는 최대 점수를 기준으로 맞춘다. 각 시점 0<t≤w0 < t \leq w에 대해 0<t′<t0 < t' < t의 선택이 정해져 있다고 보고, tt 시점의 점수가 최대가 되도록 능력 사용 여부를 정한다. 두 개 이상의 경로에서 얻는 최대 점수가 같다면 더 빠른 시점에 능력을 사용하는 경로를 우선한다. 이 경로를 저장하는 PanCakeCookie 클래스를 구현하라.

제한

능력치를 바꾸는 멤버 함수(setC, setU, setD)는 테스트 케이스당 최대 15번 호출된다. 각 능력치 변경 이후 setT 함수는 최대 100번 호출된다. 따라서 setT 함수는 최대 1 5001\ 500번 호출된다.

예제1

  1. 예제 1

    입력
    1 1 1 1 1
    
    예상 출력
    2