ステータス [I] [J] [F K] [L]はフロント示しI 4つの数字の最後に出現する位置であり、数iは、J 、K 、およびL (I> J> K> L すべての決定)第1の右の点 iは間隔が(リセット満たさないこの要件を満たす0 )、I + 1-検討、位置を埋めるものに次の位置に移動します。
そのような時間複雑度$ 0であるように見える(のTnの4 ^ {})$ ライン上だけ小さい数より起因列挙に実際には、だけでなく、で割っ 24 ;空間的複雑さがスクロールするように押圧することができる$ 0 (N ^ {}。3)$は、過去にスナップすることができます。
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 の#define MOD 998244353 4 int型、T、N、M、X、Y、Z、ANS、LL [ 105 ] [ 5 ]、RR [ 105 ] [ 5 ]、F [ 2 ] [ 105 ] [ 105 ] [ 105 ] ; 5 ボイド追加(INT&X、int型のY){ 6 X + = Y。 7 場合(X> = MOD)X- = MOD。 8 } 9 int型の計算値(INT、int型 B、int型 C、int型 D、int型E){ 10 リターン(E <= A)+(E <= B)+(E <= C)+(E <= D)。 11 } 12 INT メイン(){ 13 のscanf(" %dの"、&T)。 14 一方(t-- ){ 15 のscanf(" %D%dの"、&N、&M)。 16 のmemset(LL、0x3fを、はsizeof (LL))。 17 のmemset(RR、 - 1、はsizeof (RR))。 18 以下のために(int型 I = 1 ; I <= M; iは++ ){ 19 のscanf(" %D%D%D "、およびX&Y、およびZ)。 20の LL [Y] [Z] = 分(LL [Y] [z]は、X)。 21 RR [Y] [Z] = MAX(RR [Y] [z]は、X)。 22 } 23 のmemset(F、0、はsizeof (F))。 24 F [ 0 ] [ 0 ] [ 0 ] [ 0 ] = 1 。 25の ANS = 0 。 26 のために(int型 I = 1、P = 1 iが<= N; P ^ =、iが++ 1 ){ 27 のために(INT J = 0 ;!(J)||(J <I); J ++ ) 28 のための(INT K = 0 ;(!K)||(K <J); kは++ ) 29 のための(INT L = 0 ;!の(L)||(L <K); L ++ ){ 30 、X = F [P ^ 1 ] [J ] [K] [L]。 31 であれば(X){ 32 追加(F [P] [J] [K] [L]、X)。 33 追加(F [P] [I- 1] [K] [L]、X)。 34 追加(F [P] [I- 1 ] [J] [L]、X)。 35 追加(F [P] [I- 1 ] [j] [k]は、X)。 36 } 37 F [P ^ 1 ] [J] [K] [L] = 0 ; 38 } 39 のために(INT J = 0 ; J <I、J ++ ) 40 のための(INT K = 0 ;(K)||(K <J);!kは++ ) 41 のための(INT L = 0 ;!の(L) ||(L <K)、L ++){ 42 のために(INT Q = 1 ; Q <= 4 ; Q ++ ) 43 であれば((計算値(I、J、K、L、LL [I] [Q])> Q)||(計算値(I、J 、K、L、RR [I] [Q])< Q)){ 44 F [P] [J] [K] [L] = 0 ; 45 ブレーク; 46 } 47 であれば(I == N)を追加(ANS、F [P] [J] [K] [L])。 48 } 49 } 50 のprintf(" %d個の\ n " 、ANS)。 51 } 52 }