HZOJ行列

死に押されたようにはアイデアは、質問を誤解しているうまく...... Tucaoこのトピックに関するチューン人のああたくさんの明確な説明はなかったん......

ソリューション:

実際にはかなり不滅、[I] [J]私はに記載されている検討する前に表しF [1、i]は、右の間隔でJを持つ設定し、各列に1を入れて、その列はDP考えるまでの制限があるので、 1、[0] F初期状態[0] = 1; 注:以下は右区間[R [U]、m]を表します 。

レコードL、RプレフィックスとSL、SRが、これら2つの配列の意味ではない左間隔が終了した行数iが行の前に、SRが[i]が示される前に、同じ、SL [i]はiが列を表しどのように多くの行右間隔が始まっているされています。

転送:まず、唯一のi番目の列を検討し、右側のセクションは、第i列場合はJ 1、1の数を列挙して保持し、$ F [i]の[j]は + = F [I-1]〜[J] $、 もしi番目の列放電、それは、I-1は、音であるべきである前列は、$ F [I] [J考慮されていない ] + = F [I-1] [J-1] *(SR [I] -j + 1) $ここの$説明[i]は-j + $ 1 SRを、あなたはフロントセクションを置くことができますが、右SR I番目の列を含み、[i]は、行1、および最前列にI-1を入れている$ J-1 $ 1 - ((SR [i]は$(J-1)$ラインを占領し、i番目の列は、行$の数に置くことができる J-1))$、 上記式乗算カウント原理によって得られました。しかし、我々は、私は、列の間隔を出る前に、このような場合は考慮していない:右間隔の同じ列挙をk 1を入れて、そこです(SL [i]は-sl [I -1]) 、i行目の範囲の左端ので、そこに、この時点で(SL [i]は-sl [I -1]) 一方、IK-SL [I-1]図1は、そうA_ {$取るために、場所を置くことができ、配置されなければならないIK-SLを[I- 。1] } ^ { SL [I] -sl [-I。1] } $、合法ではないが負になります。最後に、[M] [N] fは最終的な答えです。

1の#include <iostreamの>
 2の#include <cstdioを>
 3  の#define LL長い長
 4  の#define INTのLL
 5  の#define MOD 998244353
 6  の#define MAXN 3010
 7  使って 名前空間STD。
8  int型N、M、L [MAXN]、R [MAXN]。
9  int型SL [MAXN]、SR [MAXN]、F [MAXN] [MAXN]。
図10は、 メイン()符号付き
 11  {    
 12      CIN >> N >> Mと、
13      のためには、int型 I = 1 ++、SR [R [I]] ++ CIN >> L [I] >> R [I]、SL [i]はL]をiが++; iがn = <)14      のためには、int型 I = 1 ; I <= M; iは++)SL [i]を+ = SL [I- 1 ]、SR [I] + = SR [I- 1 ]。
15      F [ 0 ] [ 0 ] = 1 16      のためには、int型 iは= 1 ; iが<= M iが++ 17      {
 18          Fを[I]が[ 0 ] Fを= [I- 1 ] [ 0 ]。
19          のためのint型 J = 1 ; J <= I; J ++ 20の              F [I] [J] =([I-F 1 ] [J] + F [I- 1] [J- 1 ] *(SR [I] -j + 1)%のMOD)%MOD。
21          のためのint型のk = 0 ; K <= iがk個++ 22          のためのINT J = SL [I- 1 ]; J <SL [i]は、J ++ 23の              F [i]が[k]はFを= [I] [K] *(IKJ)%MOD。            
24      }
 25      のprintf(" %LLDする\ n " 、F [M] [N])。
26 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/Al-Ca/p/11286366.html