[PYTHON] Atcoder ABC099 C - Solution séparée de Strange Bank

AtcoderProblem est assez difficile dans la seconde moitié du niveau de difficulté vert, mais il semble y avoir différentes solutions ...

Récursif

saiki.py


# coding: utf-8
# Your code here!
N=int(input())

def saiki(tgt,i,count,ans):
    #print(tgt,i,count,ans,temp[i])

    if i==0 or tgt==0:
        ans=min((tgt+count),ans)
        return ans
        
    num=tgt//temp[i]
    while num>=0:
        ans=saiki(tgt-num*temp[i],i-1,count+num,ans)
        if ans<(count+num):
            return ans
        num-=1
    return ans

temp=[1]
n=1
while N>=6**n:
    temp.append(6**n)
    n+=1
    
n=1
while N>=9**n:
    temp.append(9**n)
    n+=1

temp.sort()

print(saiki(N,len(temp)-1,0,10**9))

Je l'ai fait quand il était brun, donc c'est un peu en désordre. Je n'aime pas les récurrences parce que j'écris des boucles infinies

Méthode de planification dynamique

dynamic.py


# coding: utf-8
# Your code here!
N=int(input())

lis=[]

temp=6
while temp<=N:
    lis.append(temp)
    temp*=6

temp=9
while temp<=N:
    lis.append(temp)
    temp*=9

lis.sort(reverse=True)

dp=[10**9]*(N+1)
dp[0]=0

#Tableau dp[N+1]Notez le nombre minimum d'étapes pour créer le numéro d'index
for item in lis:
    for i in range(N+1):
        if dp[i]!=10**9:
            if i+item<=N:
                dp[i+item]=min(dp[i]+1,dp[i+item])
            
ans=10**10
for index,item in enumerate(dp):
    ans=min(ans,item+N-index)
print(ans)

Je pensais que c'était plus facile et plus simple

J'étais conscient de la solution du sac à dos Comme je l'ai remarqué plus tard, si vous commencez à écrire en dp comme cette fois à partir de 1, ce sera un nombre infini de sacs à dos, et si vous partez du contraire, ce sera un nombre limité de sacs à dos.

bfs Je ne sais pas Je le ferai un jour

Recommended Posts

Atcoder ABC099 C - Solution séparée de Strange Bank
Atcoder ABC60 D - Solution séparée de sac à dos simple
Atcoder ABC125 C --GCD sur tableau noir
Résolu AtCoder ABC 114 C-755 avec Python3
AtCoder ABC176
AtCoder ABC177
AtCoder ABC 174 Python
AtCoder ABC 098 C - Idées d'attention menant à la réponse
Manipulation de chaîne C AtCoder ABC110 à résoudre dans Ruby
Défiez AtCoder (ABC) 164 avec Python! Un problème ~ C
AtCoder ABC 175 Python
Résoudre Atcoder ABC176 (A, B, C, E) en Python
Atcoder ABC115 Exercice de questions passées
ABC147 C --HonestOrUnkind2 [Python]
[Explication AtCoder] Contrôle ABC180 Problèmes A, B, C avec Python!
[Explication AtCoder] Contrôle ABC158 Problèmes A, B, C avec Python!
Résolution avec Ruby et Python AtCoder ABC011 C Méthode de planification dynamique
AtCoder ABC151 Problème D Comparaison de la vitesse en C ++ / Python / PyPy
[Explication AtCoder] Contrôle ABC164 Problèmes A, B, C avec Python!
[Explication AtCoder] Contrôle ABC168 Problèmes A, B, C avec Python!