結果
問題 |
No.951 【本日限定】1枚頼むともう1枚無料!
|
ユーザー |
|
提出日時 | 2021-04-29 00:37:03 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 696 ms / 2,000 ms |
コード長 | 649 bytes |
コンパイル時間 | 167 ms |
コンパイル使用メモリ | 82,076 KB |
実行使用メモリ | 79,868 KB |
最終ジャッジ日時 | 2024-07-07 23:58:43 |
合計ジャッジ時間 | 17,410 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 52 |
ソースコード
N,W=map(int, input().split()) data=[] for _ in range(N): weight,cost=map(int, input().split()) data.append((weight,cost)) data.sort(key=lambda x:x[0],reverse=True) dp=[0]*(W+1) dp2=[0]*(W+1) for weight, cost in data: ndp=dp[:] ndp2=dp2[:] for w in range(W+1)[::-1]: if dp2[w]!=0: ndp[w]=max(dp2[w]+cost,ndp[w]) if w==weight: ndp2[w]=max(ndp2[w],cost) ndp[w]=max(ndp[w],cost) if w>weight and dp[w-weight]!=0: ndp2[w]=max(ndp2[w],dp[w-weight]+cost) ndp[w]=max(ndp[w],dp[w-weight]+cost) dp=ndp dp2=ndp2 print(max(max(dp),max(dp2)))