それは、おかげ神の問題である兄LNC指導。
前提1-LL [i]は集合的に左間隔と呼ばれる、RR [I] -mは右部であります
1-iの統計カラムから左端部Lとの接頭辞[I]、および新興、R [i]は右側面断面図である....
F [i]が[j]は、jは番号iに1の存在下でのi番目の列、左終点と右部(RR [I])における電流を表し、全体的なスキームは、電流を表します。
そこで、我々はいくつかのケースに分け
二つは、直接転送されています
F [I + 1]〜[J] = F [i] [j]はiが右に移動J、同じプログラムの転送を表します
F [I + 1] [j + 1] = F [I] [J] *(R [I + 1] -j)さらにオプション、Rから新たな電流を示し、[I + 1](すなわち右側のセクションの数)-j転送
一つはと整列している.......
F [i] [j]はFを= [I] [J] * A(IJL [I-1]、L [I] -L [I-1])
これは[I-1]、それを埋めるために必要である-L [i]は余分なステップ間隔で現在の操作がLであることを示し
IJL [I-1]は、最大放電を示し、可変配列ので、それが配置されている......
1の#include <iostreamの> 2の#include <cstdioを> 3の#include < ストリング > 4の#include <アルゴリズム> 5の#include <cmath> 6の#include <ベクトル> 7の#include <地図> 8の#include <CStringの> 9 #定義 INT長い長い 10 の#define MAXN 3010 11 の#define MOD 998244353 12を 使用して、 名前空間STDを、 13 INT 傑[MAXN]、NI [MAXN]、ni_c [MAXN]。 14 のint F [MAXN] [MAXN]。 15 INT A(INTX、int型のY) 16 { 17 であれば(Yの== 0)リターン 1 。 18 // のprintf( "X =%LLD XY =%LLD%LLD%LLD \ n"、X、XY、傑[X]、ni_c [XY])。 19 リターン傑[X] * ni_c [XY]%MOD。 20 } 21 int型N、M。 22 のint L [MAXN]、R [MAXN]。 図23は、 メイン()符号付き 24 { 25 のscanf(" %のLLDの%のLLD "、&N、&M)を、 26 傑[ 0 ] = 1。NI [ 0 ] =1 ; ni_c [ 0 ] = 1 ; 図27は、 最大の[ 1 ] = 1。[ 1 ] = 1。ni_c [ 1 ] = 1 。 28 のために(int型 I = 2 ; I <= M ++ i)が { 29 30 潔[I] =([ 'D I- 1 ] *%)、MOD。 31 // 最大のprintf( "%のLLD] =%LLDの\ nを"、私は、私は思います[I]); 32 [I] =(MOD-MOD / I)* [MOD%]%MOD。 33 ni_c [I] =(ni_c [I- 1 ] * [I])%MOD。 34 } 35 のために(int型 i = 1 ; iは= N <; ++ I) 36 { 37 のint X、Y。 38 のscanf(" %のLLDの%のLLD "、およびX&Y)。 39 L [X] ++; R [Y] ++ ; 40 } 41 のための(int型 I = 1 ; I <= M; ++ i)が 42 { 43 L [I] + = L [I- 1 ]。 44 R [I] + = R [I- 1 ]。 45 } 46 F [ 1] [ 0 ] = 1 。 47 のために(int型 I = 1 ; I <= M; ++ I) 48 { 49 のために(INT J = 0 ; J <= R [I]; ++ j)の 50 { 51 であれば(L [I] -l [I- 1 ]> IJL [I- 1 ])ブレーク。 52 F [I] [J] =([I] [J] F * A(IJL [I- 1 ]、L [I] -l [I- 1 ]))%MOD。 53 F [I + 1 ] [J] + = F [I] [J]。 54 F [iが+1 ] [J + 1 ] + = F [I] [J] *(R [I + 1 ] -j)%MOD。 55 // のprintf( "F [%のLLD] [%のLLD] =%LLDする\ n"、I、J、F [i]は[J])。 56 } 57 } 58 のprintf(" %LLDする\ n " 、F [M] [N])。 59 }