POJ - 3071

ピットタイトルに確率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(); 
    主力::解きます(); 

}

 

おすすめ

転載: www.cnblogs.com/ling-zhi/p/11787255.html