結果
| 問題 |
No.2866 yuusaan's Knapsack
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-08-30 21:55:58 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 190 ms / 2,000 ms |
| コード長 | 1,025 bytes |
| コンパイル時間 | 154 ms |
| コンパイル使用メモリ | 82,376 KB |
| 実行使用メモリ | 110,080 KB |
| 最終ジャッジ日時 | 2024-09-26 14:35:41 |
| 合計ジャッジ時間 | 4,472 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 26 |
ソースコード
import sys
input = sys.stdin.readline
MOD = 998244353
N, W = map(int, input().split())
VW = [list(map(int, input().split())) for _ in range(N)]
VW.sort(key=lambda x:x[1])
INF = 10**9
ZERO = 10000
dp = [[-INF, 0] for _ in range(max(0, W)+ZERO+1)]
dp[ZERO] = [0, 1]
for i in range(N):
ndp = [[-INF, 0] for _ in range(max(0, W)+ZERO+1)]
for j in range(max(0, W)+ZERO+1):
v, c = dp[j]
if v==-INF:
continue
nv, nc = ndp[j]
if nv<v:
ndp[j] = dp[j]
elif nv==v:
ndp[j][1] += dp[j][1]
ndp[j][1] %= MOD
cv, cw = VW[i]
if j+cw<=W+ZERO:
nv, nc = ndp[j+cw]
if nv<v+cv:
ndp[j+cw] = [v+cv, c]
elif nv==v+cv:
ndp[j+cw][1] = dp[j][1]
ndp[j+cw][1] %= MOD
dp = ndp
max_v = -INF
max_cnt = 0
for v, c in dp:
if max_v<v:
max_v = v
max_cnt = c
elif max_v==v:
max_cnt += c
max_cnt %= MOD
print(max_v, max_cnt)