만드는 중입니다

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

오르다 군대

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

요약
1부터 N까지 번호가 붙은 병사들을 줄 세우는 경우 중 경호원 번호들이 가장 긴 증가 부분수열을 이루는 경우의 수를 구합니다.
난이도

보통10점 중 6점

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

문제

전투를 준비하면서 칸 기레이는 자신의 군대에 속한 모든 전사에게 1부터 NN까지의 자연수 번호를 붙였다. 전사들은 싸울 줄은 알지만 셀 줄은 몰라서, 한 줄로 설 때마다 순서가 임의로 정해진다.

줄에 서 있는 한 명 이상의 전사를 부대라고 부른다. 부대에 속한 전사들의 번호를 줄에 선 순서대로 읽었을 때 오름차순이 되면 그 부대를 올바른 부대라고 한다. 올바른 부대들 가운데 전사 수가 가장 많은 부대를 타격 부대라고 한다. 예를 들어 줄이 1 3 2 4이면 타격 부대는 1 3 4와 1 2 4이고, 1 4는 올바른 부대이지만 타격 부대는 아니다.

칸의 일부 전사는 칸의 개인 경호병이다.

경호병들이 타격 부대를 이루는 줄 세우기의 수를 구하는 프로그램을 작성하라.

입력

첫째 줄에 전체 전사 수를 나타내는 자연수 NN이 주어진다 (1≤N≤151 \le N \le 15). 둘째 줄에는 경호병 수를 나타내는 자연수 KK가 주어진다 (1≤K≤N1 \le K \le N). 셋째 줄에는 NN 이하의 서로 다른 자연수 KK개가 오름차순으로 공백을 두고 주어진다. 이 번호들은 경호병들의 번호다.

출력

모든 전사를 한 줄로 세우는 서로 다른 방법 중에서, 어느 줄에서든 경호병들이 타격 부대를 이루는 방법의 수를 한 줄로 출력한다.

힌트

첫 번째 예제의 전사는 다섯 명이다. 타격 부대는 번호 1, 3, 4인 전사 세 명으로 구성되어야 한다. 이 조건을 만족하는 줄은 다음 11가지다: (1, 3, 2, 5, 4), (1, 3, 5, 2, 4), (1, 3, 5, 4, 2), (1, 5, 3, 2, 4), (1, 5, 3, 4, 2), (2, 1, 3, 5, 4), (2, 1, 5, 3, 4), (2, 5, 1, 3, 4), (5, 1, 3, 2, 4), (5, 1, 3, 4, 2), (5, 2, 1, 3, 4).

예제3

  1. 예제 1

    입력
    5
    3
    1 3 4
    
    예상 출력
    11
    
  2. 예제 2

    입력
    3
    3
    1 2 3
    
    예상 출력
    1
    
  3. 예제 3

    입력
    1
    1
    1
    
    예상 출력
    1