JosephinaとRPG(確率DP)ZOJ - 3735

タイトル

  C(N、3)行列の次数、各ステージは、文字、MAPを表す[I] [j]はiが打つことができる、jの確率を与える、あなたは相手を倒すためにM個の順序を与える必要があります。あなたが開始する役割を選択することができ、あなたは相手の役割を交換するかどうかを選択することができ、最後のよりも最大の勝率は相手に敗北した後に尋ねます。

考え

  定義されたDP [I] [J]配列、私はjはゲーム私の後に文字選択を表し、相手をヒットするいくつかの最初を表します。[ - 1 I] [J] *エッジ[J] [A](i番目の相手使って明確に[I] [J] = DP文字の交換の言葉でない場合は、各文字の転送はDPで知ることができます役割)。すべての後、役割の完全な転換を求めずに、その後、相手の最適な状況の現在の役割に変換するには、すべてのケースで最高の変わらないを選択することです。

書式#include <iostreamの> 
の#include <CStringの> 
の#include < 文字列 > 
の#include <アルゴリズム> 
書式#include <cmath> 
の#include <cstdioを> 
する#include <キュー> 
の#include <スタック> 
の#include <マップ>
 に#define ULL unsigned long型長い
 の#defineは(B)のmemset(A、B、はsizeof(A))を満たす
 の#define - lowbit(X)(x)は、x&()
 の#define MID(L + R)/ 2
 の#defineが長い長いllの使用名前空間をSTD; const int型 MAXN = 1E4 + 7 CONST

 

 LL MOD = 1E6 + 3 const  int型 INF = 0x3f3f3f3f constの LL INF = 0x3f3f3f3f3f3f3f3f 

ダブルエッジ[ 210 ] [ 210 ]。
二重 DP [MAXN] [ 210 ]。

INT のmain(){
     int型のn;
    一方、(CIN >> {N)
        N = N *(N- 1)*(N- 2)/ 6 以下のためにint型 i = 1 ; iが= N <; iは++ ){
             ためint型 J = 1 ; J <= N。J ++ ){ 
                CIN >> エッジ[I] [J]。
            } 
        } 
     //初始化边界
ためINT I = 0 ; I <= N; iは++ ){ DP [ 0 ] [I] = 1 } int型M。 cinを >> メートル。 ダブルMX; 以下のためにint型 iは= 1 ; iが<= M iは++ ){ int型 CIN >> ;++ ; MX = - 1 INT J = 1 ; J <= nであり、j ++ ){ DP [I] [J] = DP [I- 1 ] [j] * エッジ[j]は[A]。 MX = MAX(MX、DP [I] [J])。 } DP [i]は[A] = MX。 } のprintf(" %.6lfする\ n " 、MX)。 } 戻り 0 }

 

おすすめ

転載: www.cnblogs.com/Stay-Online/p/11333052.html