동적 프로그래밍 및 확률
조셉 변형 문제 : m 카드가 각각 무작위로 카드를 그릴, 0에서 카드 번호 마일, MI-1은 백성 밖으로의 수와 승리의 모든 확률을 물어보고.
1 <= N은 숫자 m, 카드 <= 50
승리의 시간을 고정 조셉 재귀 문제가 얻을 수 Xn에 사람들 소개
F는 [I] 나 [내가] = (F [I-1] + X) %의 N F이기 개인을 나타낸다
모든 X가, X 1 ... 0,1, X-2는 다음 0,1 ... N-2 및 번호를 다시 부여 +가된다에서, 첫 번째 라운드에서 후 개별 X를 각각 I 고려 작은 문제가 첫 번째 라운드에서 마지막 승자가 Y는 위치에 배치되어야하는 동안 (X + Y)의 N %의
이 문제는, 그것이 인터넷 가정 [I] [J]를 각각의 시간을 나타내는 I, 퍼스널 J, 인터넷 [I] [J] = 시그마 ((K + MI) % 나 == J) F [I 당첨 확률 -1] [K] / m, 초기화 인터넷 [1] [0] = (백분율) (100), 최종 출력 인터넷 [N] [] 그것에.
f를 가능 → [I + 1]로부터 F [I] [J] [(j + x)는 %의 (I + 1)], 즉 경우 (k는 + MI) % 나 == J 때
일반적으로 간단한에서 성공률 100 % 확신 할 때 생각하는 사람을 밀어 다시 밀어
#INCLUDE <비트 / stdc ++ H.> 사용 스페이스 성병; #DEFINE 맥스 (X, Y) (X)> (Y)? (X) :( y)의 #DEFINE 분 (X, Y) (X)> (Y)? (Y) :( X) #DEFINE의 RG 레지스터 #DEFINE이 줄게 긴 긴 CONST의 INT N = 100 + 5 , M = 0 , = INF 0x3f3f3f3f , P = 99,999,997 ; INT의 N, M, A [N]; 이중 F [N] [N]; 서식 < 클래스 t> 공극 RD (t 및 X) { X = 0 ; INT w = 0 ;숯 CH = 0 ; 잠시 w | = CH == (isdigit에 (CH)!) ' - ' , CH = getchar가 (); 반면 (isdigit에 (CH2)) X = (X << 1 ) + (X << 3 ) + (CH ^ 48 ) = CH getchar가 (); X ? = w - X : X; } INT 의 main () { // freopen을 ( "in.txt", "R", 표준 입력); RD (N) 번째 (m); 위한 ( int로 I = 1 ; I <= m; ++ I) RD (a [I]); F [ 1 ] [ 0 ]을 F = [ 1 ] [ 1 ] = 100.0; 위한 ( int로 I = 2 ; i가 = N <; ++ I) 대 ( INT의 J = 1 ; J <= 1; ++ j)의 { 대 ( INT에 K = 1 ; K <= m; ++ K) { INT (X) = (A [K] %의 ⅰ) [K] %? I : I; 만약 [I] F (X <J) [J] + = F [Ⅰ- 1 ] [JX] / m; 다른 경우 [I] F (x> J) [J] + = F [Ⅰ- 1 ] [I- (XJ)] / m; } } 에 대해 ( int로 I = 1 의 printf (; i가 N <= I ++) " % .2f %%" , F [N]는 [I])는, 반환 0 ; }