塩見周子の徒然日記

自分のことを塩見周子と思い込んでいるオタクです

3/9 AtCoder

こんにちは。えっちな音声を聞いてたら今日はバカ早く起きました。とーです。

AtCoder

解くに至った問題(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!を踊るとー