만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

징검다리 뒤로 건너기

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

요약
각 칸에서 앞으로 1부터 K칸 또는 뒤로 1칸 이동하는 규칙으로, 돌 1에서 N까지 같은 돌을 두 번 밟지 않는 경로의 수를 10^9+7로 나눈 나머지로 구합니다.
난이도

보통10점 중 6점

유형
동적 계획법, 비트 연산
정답자
아직 제출이 없습니다

문제

11번부터 NN번까지 번호가 붙은 NN개의 돌이 순서대로 일렬로 놓여 있습니다. 11번 돌에서 출발하여 아래 규칙을 따라 NN번 돌까지 이동합니다. 정수 KK가 주어집니다.

  • ii번 돌에서는 1≤x≤K1\le x\le K인 정수 xx에 대해 i+xi+x번 돌로 이동할 수 있습니다.
  • ii번 돌에서는 i−1i-1번 돌로 이동할 수 있습니다.
  • 돌이 없는 위치로는 이동할 수 없습니다.
  • 출발점과 도착점을 포함하여, 이미 밟은 돌은 다시 밟을 수 없습니다.

이 규칙에 따라 11번 돌에서 NN번 돌까지 이동하는 경우의 수를 소수 1 000 000 007(=109+7)1\,000\,000\,007 (=10^9+7)로 나눈 나머지를 구합니다. 밟은 돌의 번호를 순서대로 나열한 수열이 다르면 다른 이동으로 봅니다.

입력

첫 번째 줄에 돌의 개수 NN과 정수 KK가 공백으로 구분되어 주어집니다. (1≤N≤2 0001\le N\le 2\,000; 1≤K≤501\le K\le 50)

출력

첫 번째 줄에 규칙에 따라 11번 돌에서 NN번 돌까지 이동하는 경우의 수를 1 000 000 007(=109+7)1\,000\,000\,007 (=10^9+7)로 나눈 나머지를 출력합니다.

예제3

  1. 예제 1

    입력
    5 3
    
    예상 출력
    12
    
  2. 예제 2

    입력
    8 4
    
    예상 출력
    191
    
  3. 예제 3

    입력
    1923 45
    
    예상 출력
    703532137