トピックポータル
ゾル: 01 INTに圧縮m番目の各列の可動圧力調整と、等
- 圧力DPのように
#include " ビット/ STDC ++ H。" 使用 名前空間STDを、 const int型 MAXN = 15 ; const int型 MOD = 1E8; INTのN、M。 BOOL [MAXN] [MAXN];融点 ベクター < INT > NUM [MAXN]、DP [MAXN]。 ボイド DFSは(int型 I、int型 J、int型K){ 場合(J> M){ NUM [I] .push_back(K)。 DP [I] .push_back(0 )。 返します。 } DFS(I、Jの +1、K << 1 )。 もし((K&1)== 0 && MP [I]、[J + 1 ] == 1)DFS(I、J + 1、K << 1 | 1 )。 } int型のmain(){ scanf関数(" %D%dの"、&N、&M)。 用(int型 i = 1 ; iが<= N iが++ ){ ため(INT J = 1 ; J <= Mであり、j ++)のscanf(" %dの"、および MP [I] [J])。 DFS(I、0、0 ); } のための(int型 J = 0 ; J <DP [ 1 ] .size(); J ++)DP [ 1 ] [J] = 1 。 以下のために(int型 I = 2 ; iが<= N; iは++ ){ ための(int型 J = 0 ; J <DP [i]は.size(); J ++ ){ ための(int型のk = 0 ; K <DP [I - 1 ] .size(); kは++ ){ もし、((NUM [I] [J]&NUM [I - 1 ] [K])== 0) { DP [I] [J] =(DP [I] [J] + DP [I - 1 ] [K])%MOD。 } } } } int型 ANS = 0 。 用(int型 J = 0 ; J <DP [N] .size(); J ++)ANS =(ANS + DP [n]は[J])%MOD。 printf(" %d個の\ n " 、ANS)。 リターン 0 ; }