結果
| 問題 |
No.2866 yuusaan's Knapsack
|
| コンテスト | |
| ユーザー |
寝癖
|
| 提出日時 | 2024-07-18 23:24:26 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,036 bytes |
| コンパイル時間 | 1,990 ms |
| コンパイル使用メモリ | 82,060 KB |
| 実行使用メモリ | 110,960 KB |
| 最終ジャッジ日時 | 2024-08-18 19:23:46 |
| 合計ジャッジ時間 | 8,878 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 23 WA * 1 |
ソースコード
from dataclasses import dataclass
from collections import defaultdict
N, W = map(int, input().split())
v, w = map(list, zip(*[map(int, input().split()) for _ in range(N)]))
# 重さが小さい順にソート
vw = sorted(zip(v, w), key=lambda x: x[1])
v, w = map(list, zip(*vw))
@dataclass
class Data:
max: int
cnt: int
def __add__(self, other):
if self.max < other.max:
return other
elif self.max > other.max:
return self
else:
return Data(self.max, self.cnt + other.cnt)
def __repr__(self) -> str:
return f"({self.max}, {self.cnt})"
M = 20001
inf = 10**18
now = defaultdict(lambda: Data(-inf, 0))
now[0] = Data(0, 1)
for i in range(N):
nxt = defaultdict(lambda: Data(-inf, 0))
for j in now.keys():
# 使う場合
if j+w[i] <= W:
nxt[j+w[i]] += Data(now[j].max+v[i], now[j].cnt)
# 使わない場合
nxt[j] += now[j]
now = nxt
ans = sum(now.values(), Data(-inf, 0))
print(ans.max, ans.cnt)
寝癖