【hdu6578ブランク

ステータス [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型の計算値(INTint型 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 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/PYWBKTDA/p/11253923.html