こんにちは。えっちな音声を聞いてたら今日はバカ早く起きました。とーです。
解くに至った問題(9問)
ABC:013C/035C/057D/084C/099C/121A,B,C,D
ABC099C
以前は苦労して解けなかったけどいま見たらパッと「DPやん」って思いつくようになったのは成長なんでしょうか。しかし2回バグらせてたのでダメですね。
以下はpython3による答え
N = int(input()) dp = [0]*100001 #ここに手数をいれます L = [1,6,36,216,1296,7776,46656,9,81,729,6561,59049] for i in range(100001): for j in range(len(L)): if 1 <= i+L[j] <= 100000: if dp[i+L[j]] == 0: #リストの値が未更新なら dp[i+L[j]] = dp[i]+1 #参照したところから一手で飛べるとしておく else: #リストの値が更新済みなら dp[i+L[j]] = min(dp[i]+1,dp[i+L[j]]) #更新済みの値と新たに参照したところから一手で飛んでくるののどちらがより手数が少ないかを判定 print(dp[N])
ABC121
全完しました
ヒィウィゴァ!ビ-ヒ-ロ-アイワナビ-ヒ-ロ-ホホンヒホヒホハハヘヘホw
∩
\\
/ )
⊂\_/ ̄ ̄ ̄ /
\_/ ՞ةڼ◔(
) /⌒\
/ ___/⌒\⊃
( /
\\
∪
嬉しさのあまりBe a Hero!を踊るとー