[Python] DP ABC184D

Soit dp (X, Y, Z) la réponse lorsqu'il y a X pièces d'or, Y pièces d'argent et Z pièces de cuivre. Lorsque l'un des X, Y, Z vaut 100, dp (X, Y, Z) = 0. Sinon, en considérant les trois caisses dont la pièce a été tirée,

dp(X,Y,Z)=\frac{X}{X+Y+Z}(dp(X+1,Y,Z)+1)+\frac{Y}{X+Y+Z}(dp(X,Y+1,Z)+1)+\frac{Z}{X+Y+Z}(dp(X,Y,Z+1)+1)

Ce sera. (Probabilité de tirer des pièces d'or x nombre d'opérations prévu lors du tirage de pièces d'or + pièces d'argent ...)

Vous pouvez trouver la réponse en effectuant DP selon cette formule. La mise en œuvre est facile avec un mémorandum récursif.

Exemple de code


import sys
sys.setrecursionlimit(10 ** 6)  #Augmenter la limite supérieure du nombre de récurrences


def dfs(x, y, z):  #Récurrence mémorisée
    if dp[x][y][z] >= 0: #Si la valeur est déjà connue, renvoyez-la telle quelle.
        ret = dp[x][y][z]
    else:  #Si la valeur n'est pas connue, recherchez la valeur par une formule progressive.
        ret = 0
        S = x + y + z
        ret += x / S * (dfs(x+1, y, z) + 1)
        ret += y / S * (dfs(x, y+1, z) + 1)
        ret += z / S * (dfs(x, y, z+1) + 1)
        dp[x][y][z] = ret  #Note
    return ret


X, Y, Z = map(int, input().split())
M = 100
dp = [[[-1] * (M + 1) for _ in range(M + 1)] for _ in range(M + 1)]
#Condition de terminaison (initialisation)
for i in range(A, M + 1):
    for j in range(B, M + 1):
        for k in range(C, M + 1):
            if i == M or j == M or k == M:
                dp[i][j][k] = 0

# dp(X, Y, Z)La réponse que
print(dfs(X, Y, Z))

Recommended Posts

[Python] DP ABC184D
[Python] ABC175D
[Python] UnionFind ABC177D
Résoudre ABC168D en Python
Résolvez ABC167-D avec Python
[Python] Recherche de bisection ABC155D
Résoudre ABC159-D en Python
[Python] Somme cumulée ABC179D
Python
[Python] DFS (recherche de priorité en profondeur) ABC157D
ABC154-E (chiffre DP) en Python
[Python] Comment dériver nCk (ABC156-D)
(Python) ABC162-D Journal de discussion et solution
python kafka
Les bases de Python ⑤
Python intégré
Notation d'inclusion Python
Technique Python
Étudier Python
Compte à rebours Python 2.7
Mémorandum Python
Python FlowFishMaster
Service Python
fonction python ①
Les bases de Python
Mémo Python
ufo-> python (3)
Notation d'inclusion Python
Installer python
Python Singleton
Les bases de Python ④
Mémorandum Python 2
mémo python
Python Jinja2
Incrément Python
atCoder 173 Python
[Python] fonction
Installation de Python
[Python] [Explication] Concours DP typique d'AtCoder: un concours
Installer Python 3.4.3.
Essayez Python
Mémo Python
Points à noter lors de la résolution de problèmes DP avec Python
Itératif Python
Algorithme Python
Python2 + mot2vec
[Python] Variables
Fonctions Python
Python sys.intern ()
Tutoriel Python
Fraction Python
underbar python C'est ce que
Résumé Python
Démarrer python
[Python] Trier