BOJ 12735 Boat
BOJ 12735 Boat
문제 내용
개의 의 정수 쌍이 주어집니다. 인 개의 정수를 골라서 의 범위 내에서 정수 를 뽑았을 때 를 충족하는 경우의 수를 구하세요.
입력
첫 줄에는 이 주어집니다. () 다음 줄에는 와 가 주어집니다. ()
출력
문제의 정답을 로 나눈 나머지를 출력합니다.
문제 풀이
스포일러
마지막으로 뽑은 원소의 인덱스가 이고 그 값이 일 때, 그러한 경우의 수를 라고 합시다. 편의상 아무것도 뽑지 않은 경우를 , 으로 두면 다음이 성립합니다.
그리고 로 정의하면 인 경우 이 됩니다.
그러나 가 까지 커질 수 있는 상황이므로, 특정 상황을 건너뛰어서 계산할 아이디어가 필요합니다.
에 대해 을 모두 알고 있고, 에서 인 의 집합이 로 모두 동일하다면, DP 테이블의 번째 줄에서 번째 줄로 다음과 같이 건너뛸 수 있습니다.
그리고 인 경우, 이하이면서 인 가장 큰 에 대해 다음이 성립합니다.
이들을 종합하면, 의 집합이 바뀌는 시점들을 찾아서 그러한 구간은 한 줄씩 전이해주고 그렇지 않은 구간은 의 시간에 건너뜀으로써 시간에 답을 구할 수 있습니다.
Last updated on