각 날의 양이 0 이상 X 미만인 D일의 수열 중 합이 N이 되는 경우의 수를 1e9+7로 나눈 나머지를 구한다.
보통7조합론동적 계획법수학아직 제출이 없습니다시간 제한8초메모리 제한512 MB할머니가 쿠키 N개를 남기고 가셨다. 누나와 나는 곧바로 먹으려 했지만, 쿠키 옆에 안내문이 붙어 있었다.
누나가 말했다. "쿠키를 모두 먹는 방법이 몇 가지나 될까? 한번 세어 보자!"
하나의 방법은 첫째 날부터 D째 날까지 날마다 먹은 쿠키 개수를 순서대로 적은 것이다. 하루에 먹는 개수는 0 이상이고 X보다 작아야 하며, D일 동안 먹은 개수의 합은 정확히 N이어야 한다. 한 개도 먹지 않는 날이 있어도 된다. 먹은 개수가 다른 날이 하나라도 있으면 두 방법은 서로 다른 방법으로 센다.
예를 들어 N, D, X가 각각 5, 2, 5이면 방법은 4가지다.
방법의 수가 아주 커서 누나가 손으로 세다가는 끝을 보지 못할 것 같다. 그래서 프로그램으로 세기로 했다.
입력은 여러 개의 데이터 세트로 이루어진다. 데이터 세트는 100개를 넘지 않는다. 각 데이터 세트는 한 줄에 세 정수 N (1≤N≤2000), D (1≤D≤1012), X (1≤X≤2000)가 공백을 두고 주어진다. 입력의 끝은 세 정수가 모두 0인 줄로 나타내며, 이 줄은 처리하지 않는다.
각 데이터 세트마다 방법의 수를 1000000007로 나눈 나머지를 한 줄에 출력한다.