人形からパイソンを学ぼう!Blue Bridge Cup の Python の学習とテストの準備プロセスの質問を記録し、すべての瞬間を記録します。
まとめ投稿を添付します:生徒会 Blue Bridge Cup Python Breakthrough | Summary_COCOgsta's Blog - CSDN Blog
【説明】
N 個の石が一列に並んでいて、その数は 1,2,3,...,N です。
石の山にはそれぞれ特定の性質があり、整数で表すことができます. 次に、これらの N 個の石の山を 1 つの山にマージする必要があります。隣接する 2 つの石の山のみを一度に統合でき、統合のコストは 2 つの石の山の質量の合計です. 統合中の選択の順序が異なるため、統合の総コストも異なります.
問題は、総コストを最小化し、最小コストを出力する合理的な方法を見つけることです。
【説明を入力】
1 行目は数字で、N は石の積み上げ数を表します。1≦N≦300
2 行目の N の数は、各石の山 (1000 以下) の品質を示します。
【出力説明】
最小コストを表す整数を出力する
【入力例】
5
1 3 4 2 5
【出力例】
34
【コード解説】
n = int(input())
a = [0]
for i in input().split():
a.append(int(i))
s = [0]
f = [[1061109567 for j in range(310)] for i in range(310)]
for i in range(1, n+1):
s.append(s[i-1] + a[i])
f[i][i] = 0
for len in range(2, n+1):
for l in range(1, n+1):
r = l + len -1
if r <= n:
for k in range(l, r):
f[l][r] = min(f[l][r], f[l][k] + f[k+1][r] + s[r] - s[l - 1])
print(f[1][n])
复制代码
【運用実績】
5
1 3 4 2 5
34