Динамическое программирование и вероятность
проблемы деформации Joseph: м карта, каждый случайным образом взять карту, номера карты ми, от 0 до Ми-1 сообщил, что число людей, и спросил каждую вероятность выигрыша.
1 <= п, числа т, карточка <= 50
О Джозеф рекурсивная проблема может быть получена х русских людей, которые фиксированной время победы
F [I] я представляет лиц, которые выигрывают, F [I] = (F [I-1] + X)% п
Рассмотрим индивида я в первом раунде, после отдельных х, из всех х, х + 1 ... 0,1, х-2 перенумерованы 0,1 ... N-2, а затем становится меньшая проблема, в то время как последний победитель в первом раунде у должно быть расположен в положении (у + х)% п
Этот вопрос, предполагается, Fi [I] [J] представляет собой индивидуальное время я, вероятность выигрыша личного J, фи [I] [J] = сигма ((к + миль)% я == J) F [I -1] [к] / м, инициализация фи [1] [0] = 100 (в процентах), конечный результат ц [п] [] на нем.
Может → F [+ 1] из F [I] [J] [(J + х)% (г + 1)], т.е., когда (к + миль)% я == J, когда
От простого к общему выталкивающему думать, когда вероятность успеха 100% уверена, а затем снова нажмите
# include <бит / STDC ++ ч.> с использованием пространства имен STD; #define Max (х, у) (х)> (у)? (х) :( у) #define Min (х, у) (х)> (у)? (у) :( х) #define регистр гк #define LL долго долго Const INT N = 100 + 5 , М = 0 , инф = 0x3f3f3f3f , Р = 99999997 ; INT п, т, а [N]; двойная F [N] , [N]; Шаблон < класса т> недействительного й (т & х) { х = 0 ; INT ш = 0 ;символ ч = 0 ; в то время как вес | = ч == (isdigit (ч)!) ' - ' , ч = GetChar (); в то время как (isdigit (ч)) х = (х << 1 ) + (х << 3 ) + (ч ^ 48 ), гл = GetChar (); х ? = ш - х: х; } INT основных () { // freopen ( "in.txt", "г", STDIN); й (п), й (м); для ( INT I = 1 ; я <= т; ++ я) й (а [I]); F [ 1 ] [ 0 ] = F [ 1 ] [ 1 ] = 100,0; для ( INT I = 2 ; г <= п; ++ я) для ( INT J = 1 , J <= я; ++ к) { для ( Int к = 1 ; к <= т; ++ , к) { INT х = ([к]% я) [к]%? я: я; если (х <у) е [I] [J] + = F [i - 1 ] [JX] / м; остальное , если (х> к) е [I] [J] + = F [i - 1 ] [I- (Xj)] / м; } } Для ( INT I = 1 ; г <= п; ++ я) Е ( " % .2f %%" , Е [п] [I]); вернуть 0 ; }