https://www.luogu.org/problem/P2467
分析
私たちは、(シーケンスが法的ケースにある)いくつかの奇妙な自然を取得する必要があります:
プロパティ1:IとI + 1が隣接していないとき、IとI + 1切り替えが実行可能な選択肢であります
性質2:各数がn-AI + 1に変換されるため、現実的な選択肢、山と谷で、状況が変わります
プロパティ3:法的なシーケンスは、完全に逆さまにそれが正当なシーケンスであります
次いで、F [i] [j]はiが最初のピークとしてjに〜数字1であります
次いで、式を有する:[i] [j]は、F [i]は[J-1] + F [I-1]〜[I-J + 1] = F
1と2それぞれ満たす自然、考えるように描くことができます
最後に、統計後のプログラム・バイ・2フィニッシュの数、対応するプロパティ3
書式#include <iostreamの> の#include <cstdioを> 使用して 名前空間はstdを、 typedefの長い 長いLL。 CONSTの INT N = 4.2e3 + 10 。 int型のn; LL pを、[F 2 ] [N]、ANS。 INT メイン(){ 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型 iは= 2 ANS =(ANS + F [N&iは++; iがn = <)1 ] [i])と%のP。 printf(" %のLLD " ANS *、2%のP)。 }