[伯俊]#1463-1制作
9121 ワード
1として作成
https://www.acmicpc.net/problem/1463
私が書いたコード
BFSを用いてリリースした.from collections import deque
n = int(input())
def bfs(x):
q = deque([x])
visited = [-1] * (x + 1)
visited[x] = 0
while q:
x = q.popleft()
if x == 1:
return visited[x]
if x % 3 == 0 and visited[x // 3] == -1:
q.append(x // 3)
visited[x // 3] = visited[x] + 1
if x % 2 == 0 and visited[x // 2] == -1:
q.append(x // 2)
visited[x // 2] = visited[x] + 1
if visited[x - 1] == -1:
q.append(x - 1)
visited[x - 1] = visited[x] + 1
print(bfs(n))
動的プログラミングを使用したコード
解題後はダイナミックプログラミングに分類されるので,ダイナミックプログラミングで再解題する.
BFSではnから計算を開始し,DPでは1から計算を開始する.
採点の結果,BFSを上で用いたコードは,DPを下で用いたコードよりも速かった.
DPのコードを使用してすべての場合に比較計算を行うには、より長い時間がかかる場合があります.n = int(input())
dp = [0] * (n + 1)
for i in range(2, n + 1):
dp[i] = dp[i - 1] + 1
if i % 3 == 0:
dp[i] = min(dp[i], dp[i // 3] + 1)
if i % 2 == 0:
dp[i] = min(dp[i], dp[i // 2] + 1)
print(dp[n])
Reference
この問題について([伯俊]#1463-1制作), 我々は、より多くの情報をここで見つけました
https://velog.io/@ms269/백준-1463-1로-만들기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
from collections import deque
n = int(input())
def bfs(x):
q = deque([x])
visited = [-1] * (x + 1)
visited[x] = 0
while q:
x = q.popleft()
if x == 1:
return visited[x]
if x % 3 == 0 and visited[x // 3] == -1:
q.append(x // 3)
visited[x // 3] = visited[x] + 1
if x % 2 == 0 and visited[x // 2] == -1:
q.append(x // 2)
visited[x // 2] = visited[x] + 1
if visited[x - 1] == -1:
q.append(x - 1)
visited[x - 1] = visited[x] + 1
print(bfs(n))
n = int(input())
dp = [0] * (n + 1)
for i in range(2, n + 1):
dp[i] = dp[i - 1] + 1
if i % 3 == 0:
dp[i] = min(dp[i], dp[i // 3] + 1)
if i % 2 == 0:
dp[i] = min(dp[i], dp[i // 2] + 1)
print(dp[n])
Reference
この問題について([伯俊]#1463-1制作), 我々は、より多くの情報をここで見つけました https://velog.io/@ms269/백준-1463-1로-만들기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol