RT

#include <ビット/ STDC ++ H>
 に#define LL長い長い
 使用して 名前空間STDを、
const  int型 MOD = 1E9 + 7 
インラインINT RD(登録整数 X = 0、レジスタチャー CH = GETCHAR()、レジスタINT F = 0 ){
     ながら = CH == F(isdigit(CH)!)' - '、CH = GETCHAR()。
    一方、(isdigit(CH))X =(X << 1)+(X << 3)+ CH- 48、CH = GETCHAR()。
    リターン F - ? X:X;
} 
LL mgml(-1,11,11- B、LL ANS = 1 ){
     ため(; B; B >> = 1、A = A *%のMOD)場合(B&1)ANS = ANS *%のMOD。
    戻り値は、ANS; 
} 
int型N、M、K。
INT メイン(){ 
    N = RD(); M = RD(); K = RD()。
    もし(N + M- 1 > k)の戻りプット(" 0 ")&0 もし(N == 1 ){ 
        LL ANS = 1 以下のためのint型 iはkは=; I> = K-M +1 ; - I)ANS = ANS * I%MOD。
        リターンのprintf(" %のLLD \ N "、ANS)&0 ; 
    } 
    戻り 0 
} 
/ * //萎了... 
の#include <ビット/ STDC ++ H> 
に#define LL長い長い
名前空間stdを使用。
const int型MOD = 1E9 + 7。
インラインINT RD(登録整数X = 0、レジスタチャーCH = GETCHAR()、INTレジスタF = 0){ 
    ながら(!のisdigit(CH))= CH == F ' - '、CH = GETCHAR()。
    一方、(isdigit(CH))X =(X << 1)+(X << 3)+ CH-48、CH = GETCHAR()。
    リターンF -x:X;?
} 
LL mgml(LL B -1,11,11- ANS = 1){
} 
int型N、M、K。 
    ため(; B; B >> = 1、A = A *%のMOD)(B&場合
    ANSを返します。
INT DP [15] [15] [1050]。
ベクター<整数>状態[15]。
メインINT(){ 
    N = RD(); M = RD(); K = RD()。
    (N + M-1> k)の戻りプット( "0")であれば&0。
    INT U = 1 << K。
    以下のために(INT I 0 =; I <U; ++ I){ 
        int型のCC = 0。
        以下のための(int型J =; J; J-= J&-j)CC ++; 
        状態[CC] .push_back(I)。
    } 
    ため(INT I 1 =; I <= N; ++ I)DP [I] [0] [0] = 1; 
    以下のために(INT I = 1; I <= M; ++ I)DP [0] [i]が[0] = 1; 
    INT COL1 = RD()。
    (COL1)DP [1] [1] [1 << col1-1] = 1の場合。
    そうでなければ(私は1 = INT; I <= K; ++ i)に対するDP [1] [1] [1 << I-1] = 1。
    以下のために(INT I 1 =; I <= N; ++ i)に対する(INT J = 1; J <= M; ++ J){ 
        int型COL = RD()。
        IF(COL){
            用(?INT S1 = 0、LIM1 = I == 1 0:MAX(I-1、j)は、S1 <(INT)状態[LIM1] .size(); ++ S1)
                のための(INT S2 = 0、 LIM2 = J == 1 0:MAX(I、J-1)、S2 <(INT)状態[LIM2] .size(); ++ S2){ 
                    int型X =状態[LIM1] [S1]、Y =状態[LIM2] [S2]。
                    IF((X&(1 << COL-1))== 0 &&(Y&(1 << COL-1))== 0)(DP [I] [J] [X | Y |(1 << col- 1)] + = 1LL * DP [I-1]〜[J] [X] * DP [I]、[J-1] [Y]%のMOD)%= MOD。
                } 
        } 
        他{ 
            ため(INT S1 = 0、LIM1 = I 1 == 0:MAX(I-1、j)は、S1 <(INT)状態[LIM1] .size(); ++ S1)
                (INT用S2 = 0、LIM2 = J == 1 0:MAX(I、J-1)、S2 <(INT)状態[LIM2] .size(); ++ S2){ 
                    int型X =状態[LIM1] [S1 ]、Y =状態[LIM2] [S2]。
                    //のprintf( " - >%D%D%D%D%D \ n"は、私は、
                    用(int型、D =(U-1)^(X | Y); D; D- = D&-d)(DP [I] [J] [X | Y |(D&-d)] + = 1LL * DP [I-1]〜[J] [X] * DP [I]、[J-1] [Y]%のMOD)%= MOD。
                } 
        } 
    } 
    //のためには、(INT iは1 =; I <= N; ++ i)に対する(INT J = 1; J <= M; ++ j)のための(INT D = 0; D <U; ++ D)のprintf( "I:%のDJ:%のDD:%D DP:%D \ n"は、I、J、D、DP [I] [J] [D])。
    int型ANS = 0; 
    以下のために(INT I 0 =; I <U; ++ i)から(ANS + = DP [n]が[M] [I])%= MOD。
    printf( "%dの\ n"は、(ANS%MOD + MOD)%のMOD)。
    0を返します。
} * /
T3

おすすめ

転載: www.cnblogs.com/hzoi2018-xuefeng/p/12227858.html
RT
RT
rt