만드는 중입니다

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

반삼각형 상자

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

요약
막대 N개 중 일부를 골라 세 막대로 삼각형을 만들 수 없는 상자를 만드는 경우의 수를 구합니다.
난이도

보통10점 중 6점

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

문제

작은 Bajtek은 최근 NN개의 막대가 들어 있는 상자를 받았다. 각 막대의 길이는 11 이상 MM 이하의 자연수이다.

Bajtek은 삼각형을 너무 싫어한다. 그래서 상자에 일부 막대만 남기고 나머지는 버려서, 남은 막대 중 세 개를 골라도 삼각형을 만들 수 없는 반삼각형 상자를 만들고 싶어 한다. 막대는 부러뜨리거나 붙일 수 없다.

길이가 aa, bb, cc인 세 막대로 삼각형을 만들 수 있는 조건은 a+b>ca + b > c, a+c>ba + c > b, b+c>ab + c > a가 모두 성립하는 것이다.

예를 들어 길이가 (1,1,3,4)(1, 1, 3, 4)인 막대들이 든 상자는 반삼각형이지만, (1,2,2,3)(1, 2, 2, 3)인 막대들이 든 상자는 그렇지 않다. 길이가 22, 22, 33인 막대로 삼각형을 만들 수 있기 때문이다.

Bajtek은 막대 일부를 남겨서 비어 있지 않은 반삼각형 상자를 만드는 방법이 몇 가지인지 알고 싶어 한다. 어떤 길이 xx에 대해 남은 길이 xx인 막대의 개수가 다르면 두 방법은 다른 것으로 본다. 같은 길이의 막대는 서로 구별하지 않는다.

NN, MM과 막대의 길이를 입력받아, 비어 있지 않은 반삼각형 상자를 얻는 방법의 수를 구하는 프로그램을 작성하라.

입력

첫 줄에 자연수 NN, MM이 주어진다 (1≤N,M≤15001 \le N, M \le 1500). 둘째 줄에는 상자에 들어 있는 막대의 길이 a1,a2,…,aNa_1, a_2, \ldots, a_N이 주어진다 (1≤ai≤M1 \le a_i \le M).

출력

비어 있지 않은 반삼각형 상자를 얻는 방법의 수를 정수 하나로 출력한다. 주어진 제한에서 결과값은 101810^{18}을 넘지 않는다.

예제3

  1. 예제 1

    입력
    8 4
    1 1 2 2 3 3 4 4
    
    예상 출력
    24
    
  2. 예제 2

    입력
    4 8
    1 2 4 8
    
    예상 출력
    15
    
  3. 예제 3

    입력
    2 1500
    1 1500
    
    예상 출력
    3