効果:N-長配列$ $、各位置範囲$ [0,3] $、$ M $制限$は(Lは、R、X)$ [R、L] $を表し内$ X $ $種を有します数は、いくつかのプログラムを見つけます。
各数の維持は、暴力の$ DP $を最後の位置が登場しました
トリックは、位置の数は実装に$ 0 $を選択していないことです
#include <iostreamの> する#include <cstdioを> する#include <キュー> の#define REP(I、N)のために(INT iは=、iが<= N; ++ I) の#define PER(I、N )のための(I = N int型; I> = A; - I) 名前空間stdを使用。 typedefの長い長いLL。 typedefのペア<int型、int型> PII。 CONST int型N = 110、P = 998244353。 N INT、M。 ベクター<PII> F [N]。 INT DP [N] [N] [N] [N]。 ボイド追加(INT&X、int型のY){X + = Y;(X> = P)のx = Pなら} int型のmain(){ int型のT。 cinを>>トン。 (t--){一方 CIN >> N >> M。 REP(I、1、N)F [i]が.clear(); 一方、(M--){ int型のL、R、X。 CIN >> L >> R >> X。 F [R] .pb(PII(L、X)); REP(I、1、N){ CUR ^ = 1; REP(j、0、I)REP(k、0、j)のREP(T、0、K)DP [CUR] [j] [k]は[T] = 0; REP(j、0、I-1)REP(k、0、j)のREP(T、0、K){ int型&R = DP [J] [K] [T] [CUR!]。 もし継続(R!)。 追加(DP [CUR] [j] [k]は[T]、R)。 追加(DP [CUR] [I-1]〜[J] [K]、R)。 追加(DP [CUR] [I-1]〜[J] [T]、R)。 追加(DP [CUR] [I-1] [K] [T]、R)。 } REP(j、0、I-1)REP(k、0、j)のREP(T、0、K){ ための(自動U:F [I]){ IF(1+(J> = UX)+ (K> = UX)+(T> = UX)= UY){! DP [CUR] [j] [k]は[T] = 0; } } (I == n)が追加した場合(ANS、DP [CUR] [j] [k]の[T])。 } } のprintf( "%d個の\ n"、ANS)。 } }