結果
| 問題 | No.2866 yuusaan's Knapsack |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-08-30 01:49:38 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 257 ms / 2,000 ms |
| コード長 | 1,578 bytes |
| コンパイル時間 | 315 ms |
| コンパイル使用メモリ | 82,360 KB |
| 実行使用メモリ | 108,008 KB |
| 最終ジャッジ日時 | 2025-08-30 01:49:45 |
| 合計ジャッジ時間 | 6,360 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 26 |
ソースコード
## https://yukicoder.me/problems/no/2866
MIN_VALUE = - 10 ** 18
MOD = 998244353
def main():
N, W = map(int, input().split())
vw = []
for _ in range(N):
v, w = map(int, input().split())
vw.append((v, w))
vw.sort(key=lambda x : x[1])
dp = {0:[0, 1]}
for v, w in vw:
new_dp = {}
for key, values in dp.items():
value, count = values
if key not in new_dp:
new_dp[key] = [MIN_VALUE, 0]
if new_dp[key][0] < value:
new_dp[key][0] = value
new_dp[key][1] = count
elif new_dp[key][0] == value:
new_dp[key][1] += count
new_dp[key][1] %= MOD
new_key= w + key
new_value = value + v
if new_key <= W:
if new_key not in new_dp:
new_dp[new_key] = [MIN_VALUE, 0]
if new_dp[new_key][0] < new_value:
new_dp[new_key][0] = new_value
new_dp[new_key][1] = count
elif new_dp[new_key][0] == new_value:
new_dp[new_key][1] += count
new_dp[new_key][1] %= MOD
dp = new_dp
answer = MIN_VALUE
ans_count = 0
for key, values in dp.items():
value, count =values
if answer < value:
answer = value
ans_count = count
elif answer == value:
ans_count += count
ans_count %= MOD
print(answer, ans_count)
if __name__ == "__main__":
main()