エネルギーを集める


質問する


N個のエネルギービーズが一列に並んでいて、エネルギービーズを利用してエネルギーを集めたいです.
iエネルギー球の重量はWi
以下はエネルギーを収集する方法で、繰り返し使用できます.
1.エネルギー球を選択します.均一なエネルギービーズをXといいます(最初、最後を除く)
2.X番目のエネルギー球を除去する.
3.Wx−1 X Wx+1のエネルギーを収集することができる.
こうそくじょうけん
エネルギー球の個数N(3<=N<=10)

に答える


結果は、ビーズを選択する順序に依存します.
定義関数:指定したリストから両端点以外の球を選択したときに得られるエネルギーの関数を返します.
再帰的に表現すれば.

私が定義した関数は、自分で定義できることがわかります.
指定されたリストの長さが2の場合は、2つの端点を除外した場合、ビーズを選択できないため、0を返します.

コード#コード#

'''
Created by jun on 21/05/26
'''
def dfs(marbles:list):
    if len(marbles) == 2:
        return 0
    return max(marbles[idx - 1] * marbles[idx + 1] + dfs(marbles[:idx] + marbles[idx + 1:])
               for idx in range(1, len(marbles)-1))

N = int(input())
marbles = list(map(int, input().split()))
print(dfs(marbles))

新知の事実


pop/pushではなくインデックススライドを使用します.