提出 #41292474


ソースコード 拡げる

import sys

input = sys.stdin.readline


def solve(n, w, arr):
    dp1 = [0] * (w + 1)
    dp2 = [[] for _ in range(w + 1)]
    dp2[0] = arr
    ans = 0
    for i in range(w + 1):
        for wj, vj in dp2[i]:
            if i + wj <= w and dp1[i] + vj > dp1[i + wj]:
                dp1[i + wj] = dp1[i] + vj
                dp2[i + wj] = dp2[i][:]
                dp2[i + wj].remove((wj, vj))
        ans = max(ans, dp1[i])

    print(ans)


def main():
    n, w = list(map(int, input().split()))
    arr = [tuple(map(int, input().split())) for _ in range(n)]
    solve(n, w, arr)


main()

提出情報

提出日時
問題 D - Knapsack 1
ユーザ drugkeeper
言語 PyPy3 (7.3.0)
得点 100
コード長 618 Byte
結果 AC
実行時間 1732 ms
メモリ 333076 KiB

ジャッジ結果

セット名 All
得点 / 配点 100 / 100
結果
AC × 13
セット名 テストケース
All 0_00, 0_01, 0_02, 1_00, 1_01, 1_02, 1_03, 1_04, 1_05, 1_06, 1_07, 1_08, 1_09
ケース名 結果 実行時間 メモリ
0_00 AC 66 ms 62020 KiB
0_01 AC 49 ms 61996 KiB
0_02 AC 50 ms 61924 KiB
1_00 AC 57 ms 74276 KiB
1_01 AC 62 ms 75668 KiB
1_02 AC 608 ms 271148 KiB
1_03 AC 1522 ms 331328 KiB
1_04 AC 1732 ms 333076 KiB
1_05 AC 1499 ms 297220 KiB
1_06 AC 1572 ms 288044 KiB
1_07 AC 1032 ms 249436 KiB
1_08 AC 589 ms 235788 KiB
1_09 AC 289 ms 146052 KiB