[上へ] 2019HDUハング電界初のマルチ学校

限り998として、ACの家ではなく、2000年ではなく1000年ですか

この中小豆は心からアドバイスより高速な方法をORZを求めます

 

参考:https://www.cnblogs.com/DeaphetS/p/11229389.html

 

  デジタルフィールドを取得しようといじり、転送はなりません。

  ショックを受け、4次元DP N4であることが判明

  そして、_問題を解決するには違いはありませんが付属していますが、本当に速いボードは998msコードに持っていた迅速な読み取りを追加しました(:з「∠)_

#include <iostreamの> 
する#include <cstdioを> 
する#include <アルゴリズム> 
の#include <cmath> 
の#include <ユーティリティ> 
の#include <CStringの> 
する#include <cstdlib> 
の#include <ベクトル>
 使用して 名前空間STD。
typedefの長い 長いLL。
INTのN、M、T。
ベクター <ペア< 整数整数 >> RQ [ 101 ]。
constの LL MOD = 998244353 ; 
LLのD [ 101 ] [ 101 ] [ 101 ] [ 2]; 


インラインチャーNC(){
     静的 チャー BUF [ 100000 ]、* P1 = BUF、* P2 = BUF。
    リターンのP1 == p2の&&(P2 =(P1 = BUF)+のfread(bufは、1100000、STDIN)、P1 == P2)EOF:* P1 ++? 
} 
インラインint型RD(){
 CHAR CH = NC()。int型の合計= 0 ;
しばらく(!(CH> = ' 0 ' && CH <= ' 9 '))CH = NC();
一方、(CH> = ' 0 ' && CH <= ' 9 ')合計=合計* 10 + CH- 48、CH = NC()。
戻り値の合計。
} 


INT (メイン)
{ 
    T = RD()。
    一方、(t-- ){ 
        N = RD(); M = RD()。
        int型共同= N;
        以下のためにint型 i = 1 ; iが<= N; iは++ ){ 
            RQ [I] .clear(); 
            RQ [I] .push_back({I、1 })。
        } 
        のためのint型 I = 1 ; I <= M; iが++ ){
             int型L、X、R。
            L = RD(); R = RD(); X = RD()。
            RQ [R] .push_back({1、X})。
        } 
        のmemset(D、0はsizeof (d)参照)。
        D [ 0 ] [ 0 ] [ 0 ] [ 0 ] = 1 
        
        ためintは今= 1 ;今<= N;今++ ){
             BOOLの GAL =今&1 以下のためにint型私= 0 ;私は今= <;私は++ のためにint型J =; J <=今; J ++ のためのINT K = J、K <=今; ++ k個
                        D [i]は[J] [K] [GAL] = 0 ; 
        
            int型 iは= 0 ;私は今= <Iは++ のためint型 J = I; J <=今、J ++ のためのINT K = J; =今<Kあり、k ++ ){ 
                        D [i]は[J] [今 - 1 ] [ガロン] =(D [i]は[J] [K] [GAL ^ 1 ] + D [i]は[J] [今- 1 ] [ガロン])%MOD。
                        D [j] [k]の[今 - 1 ] [ガロン] =(D [i]は[J] [K] [GAL ^ 1 ] + D [j] [k]の[今- 1 ] [ガロン])%モッズ; 
                        D [i]は[K] [今 - 1 ] [ガロン] =(D [i]は[J] [K] [GAL ^ 1 ] + D [i]の[K] [今- 1 ] [ガロン])%モッズ; 
                        D [i]は[J] [K] [GAL] =(D [i]は[J] [K] [GAL ^ 1 ] + D [i]は[J] [K] [GAL])%MOD。
                    } 
            
            のためにint型 i = 0 ; iは今= <; iは++ のためint型 J = I; J <=今、J ++のためのint、K = J。K <=今。K ++ (オートP:RQ [今])
                             の場合((p.first <= I)+(p.first <= J)+(p.first <= K)+(p.first <=今)! = p.second)
                                D [i]は[J] [K] [GAL] = 0 ; 
        } 
        LL ANS = 0 以下のためにint型 i = 0 ; iは= N <I ++ のためのINT J = I; J <= N; J ++ のためにINT K = J、K <= N; ++ k個 
                    ANS =(ANS + D [i]は[J] [K] [N - 1 ])%MOD。
        printf(" %LLDする\ n " 、ANS)。

    } 

    戻り 0 
}
ブランク

  書き込みに書き込むためのペアを取るために、ベクトルをやってみたかった、残念ながら実際に達成することはできません。

おすすめ

転載: www.cnblogs.com/non-/p/11259568.html