만드는 중입니다

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

LIS 넘버

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

요약
길이 N인 수열에서 원소를 지워 LIS Number가 K가 되는 방법의 수를 1,000,000,007로 나눈 나머지로 구합니다.
난이도

보통10점 중 6점

유형
동적 계획법, 누적 합, 배열
정답자
아직 제출이 없습니다

문제

정수로 이루어진 수열 AA의 LIS 넘버는 엄격하게 증가하는 수열 LL개를 이어 붙여 AA를 만들 수 있는 가장 작은 양의 정수 LL이다. 예를 들어 A={1,4,4,2,6,3}A = \{1, 4, 4, 2, 6, 3\}의 LIS 넘버는 4이다. {1,4}+{4}+{2,6}+{3}\{1, 4\} + \{4\} + \{2, 6\} + \{3\}으로 AA를 얻을 수 있지만, 3개 이하의 수열로는 만들 수 없다. 엄격하게 증가하는 수열의 LIS 넘버는 1이다.

길이가 NN인 수열과 정수 KK가 주어진다. 주어진 수열을 LIS 넘버가 KK인 수열로 바꾸려 한다. 할 수 있는 연산은 원래 수열에서 0개 이상의 수를 삭제하는 것뿐이다. 이 방법의 수를 세어라. 삭제한 위치(인덱스)의 집합이 다르면 서로 다른 방법으로 본다.

입력

첫 줄에 테스트 케이스의 개수를 나타내는 양의 정수 tt가 주어진다. 각 테스트 케이스의 첫 줄에는 두 정수 NN (1≤N≤50,0001 \le N \le 50{,}000)과 KK (1≤K≤101 \le K \le 10)가 주어진다. 둘째 줄에는 수열의 정수 NN개가 공백 한 칸으로 구분되어 주어진다. 각 정수는 0 이상 100000 이하이다.

출력

각 테스트 케이스에 대해, 길이 NN의 주어진 수열을 LIS 넘버가 KK인 수열로 바꾸는 방법의 수를 출력한다. 수가 매우 커질 수 있으므로 1,000,000,0071{,}000{,}000{,}007로 나눈 나머지를 출력한다.

예제1

  1. 예제 1

    입력
    4
    5 1
    1 2 3 4 5
    5 1
    1 1 1 1 1
    5 2
    1 1 1 1 1
    5 2
    1 2 3 4 5
    
    예상 출력
    31
    5
    10
    0