情報学オリンピック オールインワン Python エディション | チャーム ブレスレット

赤ちゃんからPythonを学ぼう!Python を使用して、情報オリンピックのオールインワン Web サイトのトピックを完成させ、あらゆる瞬間を記録します。

要約投稿を添付してください: Informatics Olympiad All-in-One Python Edition |


【説明】

古典的な 0-1 ナップザック問題では、アイテムが n 個あり、番号 i のアイテムの重さは w[i]、値は c[i] です。ここで、これらのアイテムからいくつかのアイテムを選択して、それらを容量 m のナップザック、総重量が m を超えないことを前提として、バックパック内の物の値をできるだけ大きくします。

【入力】

行 1: 2 つの整数、n (アイテムの数、n≤3500) と m (バックパックの容量、m≤12880)。

行 2...n+1: 各行の 2 つの整数 w[i] と c[i] は、各項目の重みと値を表します。

【出力】

最大合計値を示す 1 行、1 つの数字のみ。

【入力サンプル】

4 6

1 4

2 6

3 12

2 7

【出力例】

23

【コード説明】

n,m = [int(i) for i in input().split()]

Wi = [0]
Ci = [0]

dp = [0 for i in range(m+1)]

for i in range(1, n+1):
    ls = [int(i) for i in input().split()]
    Wi.append(ls[0])
    Ci.append(ls[1])

for i in range(1, n+1):
    for j in range(m, Wi[i]-1, -1):
        dp[j] = max(dp[j], dp[j - Wi[i]] + Ci[i])

print(dp[m])

【運用結果】

4 6
1 4
2 6
3 12
2 7
23

おすすめ

転載: blog.csdn.net/guolianggsta/article/details/130902860