結果
| 問題 | No.2232 Miser's Gift | 
| コンテスト | |
| ユーザー |  FromBooska | 
| 提出日時 | 2023-03-04 14:38:51 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 327 ms / 2,000 ms | 
| コード長 | 947 bytes | 
| コンパイル時間 | 203 ms | 
| コンパイル使用メモリ | 81,664 KB | 
| 実行使用メモリ | 156,308 KB | 
| 最終ジャッジ日時 | 2024-09-18 01:17:30 | 
| 合計ジャッジ時間 | 12,442 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge6 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 55 | 
ソースコード
# ナップザック問題の変形バージョン
# ナップザックは1度だけやる
# 入力例1でたとえばx=3ならW-3=2を見ると、ナップザックの最大価値3で現在のナップザックW最大価値8
# これでx=3の価値が5なら差がつかない、Wでの値が1を上回れば差がつくので、価値は6とする
N, W = map(int, input().split())
weight = []
value = []
for n in range(N):
    w, v = map(int, input().split())
    weight.append(w)
    value.append(v)
    
dp = [[0] * (W+1) for i in range(N)]
for i in range(N):
    for j in range(W+1):
        # use i
        if j - weight[i] >= 0:
            dp[i][j] = max(dp[i-1][j - weight[i]] + value[i], dp[i-1][j])
        else:
            # no use set i
            dp[i][j] = dp[i-1][j]
#print(dp[N-1])
for x in range(1, W+1):
    current_value = dp[N-1][W-x]
    current_diff = dp[N-1][W] - current_value
    ans = current_diff+1
    print(ans)
            
            
            
        