ピットタイトルに確率DP
私は間違って半分の時間を探して、複数のデータセットを演奏すると思いました。。。。。。。。
#include <iostreamの> する#include <cstdioを> の#define RI登録INT の#define U INT 名前空間OPT { インラインU における(){ UX(0)、F(1 )。 チャーS(GETCHAR())。 一方、(S < ' 0 ' || S> ' 9 ' ){ もし、(S == ' - ')、F = - 1 。 S = GETCHAR()。 } 一方、(S> = ' 0 ' && S <= ' 9 ' ){ X =(X << 1)+(X << 3)+ S- ' 0 ' 。 S = GETCHAR()。 } 戻りのx *のF。 } } 使用して ::オプトインの中で、 #include <CStringの> 名前空間主力{ ダブル [ 505 ] [ 505 ]、[F 505 ] [ 505 ]。 インラインボイド(解決){ 一方(1 ){ UのN。 使用してのstd :: cinをします。 cinを >> N。 場合(Nの== - 1)のリターン; U M(1 << N)。 用(RI I(0 ; iがMを<++){I) のために(RIのJ(0); J <M; ++ J){ CIN >> [I] [J]。 } } のstd ::のmemset(F、0、はsizeof (F))。 用(RI I(0); 私はMを<; ++ I)F [ 0 ] [I] = 1.0 。 以下のために(RI iが(1); iが= N <; ++ I){ 用(RIのJ(0); J <M; ++ J){ ため(RI K(0)、K <M; ++ K ){ もし、(((J >>(I- 1))^ 1)==(K >>(I- 1 ))){ F [I] [J] + = F [I- 1 ] [K] * [J] [K]・[I-F 1 ] [J]。 } } } } 二重 MX(0.0 )。 uのチーム; 用(RI I(0 <; Mが++ i)は{I) であれば(F [N] [i]が> MX){ MX = F [N] [i]は、チーム= I + 1 。 } } のstd :: coutの <<チーム<< はstd ::てendl; } } } int型のmain(){ // freopenは( "X.TXT"、 "R"、STDIN)。 std ::イオス:: sync_with_stdio(偽); 主力::解きます(); }