[2019ハング電気マルチ補正最初] [hdu6578ブランク

トピックへのリンク:http://acm.hdu.edu.cn/showproblem.php?pid=6578

カウントの問題は、それを考える...しかし、サブDP

DP [I] [J] [K] [W] 1-iの最後に出現する降順の数4位の位置のために、私は> = J> => = W Kが、意志MLE後、私は出てスクロールします。

しかし、そこに制限は、あるベクトルメモリのビットを持つすべての制限の右端を押して、それが現在の状態が復帰0を満たしていない場合は、各状態と制限を列挙し、i番目の位置に来ます。

1つの#include <アルゴリズム>
 2の#include <iostreamの>
 3の#include <cstdioを>
 4の#include <ベクトル>
 5の#include <CStringの>
 6  使って 名前空間STD。
7 typedefの長い 長いLL。
8  のconst  int型 MAXN = 100 + 5 9  のconst  int型 MOD = 998244353 10  int型N、M、ANS。
11  int型 DP [ 2 ] [MAXN] [MAXN] [MAXN]。
12ベクター<ペア< INTINT >> [MAXN]。
13  INT メイン(){
 14      のint POS。
15台の      cinを>> POS。
16      一方(pos-- ){
 17          INT ANS = 0 18          のscanf(" %D%dの"、&​​N、&M)。
19          のためにint型 i = 1 ; iが<= N iが++ 20              [I] .clear();
21          のためにint型 I = 0 ;私がm <I ++は{)
 22             int型のL、R、X。
23              のscanf(" %D%D%D "、&​​L&R&X)。
24              [R] .push_back(対< 整数整数 > (L、X));
25          }
 26          DPは[ 0 ] [ 0 ] [ 0 ] [ 0 ] = 1 27          int型になりました= 1 ;
28          のためにint型 i = 1 ; iが<= N I ++は、今^ = 1 ){
 29              のためのINTJ = 0 ; J <= I; J ++ 30                  のためのINT K = 0 ; K <= Jあり、k ++ 31                      のためのINT T = 0、T <= K; T ++ 32                          DP [今] [j] [k]は[T] = 0 ;
33              のためのint型 J = 0 ; J <I、J ++ 34                  のためのINT K = 0 ; K <= Jあり、k ++ 35                      のためのINT T = 0、T <= K; T ++ ){
36                          DP [今] [j] [k]は[T] =(DP [今^ 1 ] [j] [k]は[T] + DP [今] [j] [k]の[T])%MOD。
37                          DP [今] [I - 1 ] [K] [T] =(DP [今^ 1 ] [j] [k]は[T] + DP [今] [I - 1 ] [K] [T]) %モッズ;
38                          DP [今] [I - 1 ] [J] [T] =(DP [今^ 1 ] [j] [k]は[T] + DP [今] [I - 1 ] [J] [T]) %モッズ;
39                          DP [今] [I - 1 ] [J] [K] =(DP [今^ 1 ] [j] [k]は[T] + DP [今] [I - 1 ] [J] [K]) %モッズ;
40                     }
 41              のためのINT J = 0 ; J <I、J ++ 42                  のためのINT K = 0 ; K <= J; ++ kは43                      のためのINT T = 0 ; T <= K T ++ 44の                         ための(自動TMP :[i])と
 45                              であれば1 +(J> = tmp.first)+(K> = tmp.first)+(T> = tmp.first)=!tmp.second)
 46                                  DP [今] [J ] [K] [T] = 0 ;
47          }
 48          今や= N&1 ;
49          のためにint型 I = 0 ; iがN <I ++ 50              のためのINT J = 0 ; J <= I; J ++ 51                  のためのINT K = 0 ; <= J kは、kは++ 52の                      ANS =(ANS + DP [今] [I] [J] [K])%MOD。
53          のprintf(" %d個の\ n " 、ANS)。
54      }
 55  
56 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/sainsist/p/11304699.html