https://www.luogu.org/problem/P2467
분석
우리는 (순서가 합법적 인 경우에) 이상한 특성을 얻을 필요가 :
속성 1 : I 및 I + 1에 인접하지 않은 때, 난 + 1 스위칭 가능한 옵션 인
속성 2 : 각 숫자를 n-AI + 1로 변환을 위해, 실행 가능한 옵션, 봉우리와 계곡과 상황이 켜집니다
속성 3 : 법적 순서는 완전히 거꾸로 그것은 합법적 인 순서입니다
그때는 1 피크로 ~ J를 도면 부호 1 [I] [J] f를 거기
그런 다음 식을 가지고 : [I]는 [j]가 F가 F = [I] [J-1] + F [I-1] [I-J + 1]
1, 2 각 대회의 성격, 생각을 그릴 수 있습니다
마지막으로, 후 통계 프로그램 별 두 마무리의 수, 대응하는 속성 3
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
사용법 #include <iostream> #INCLUDE <cstdio> 사용 스페이스 성병; 타입 정의 긴 긴 LL; CONST의 INT의 N = 4.2e3 + 10 ; INT의 N; LL의 P [F 2 ] [N], ANS; INT 의 main () { 는 scanf ( " % d 개 %의 LLD " , 및 N, P); F [ 0 ] [ 2 ] = 1 ; 대 ( INT I = 3 , Q = 1 ; i가 <= N; I ++와 Q ^ = 1 ) 에 대한( INT에 J = 2 , J <= I, J ++ ) F [Q] [J] = (F [Q] [J - 1 ] + F [Q ^ 1 ] [I-J + 1 ]) %의 P; 위한 ( int로 난 = 2 ANS = (ANS + F [N 및 내가 ++; i가 N = <) (1) [I]) %의 P; 의 printf ( " %의 LLD는 " * ans와 2 % P)를; }