結果
問題 |
No.527 ナップサック容量問題
|
ユーザー |
|
提出日時 | 2020-09-14 09:36:21 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
WA
|
実行時間 | - |
コード長 | 618 bytes |
コンパイル時間 | 309 ms |
コンパイル使用メモリ | 12,544 KB |
実行使用メモリ | 45,304 KB |
最終ジャッジ日時 | 2024-06-22 00:38:41 |
合計ジャッジ時間 | 26,446 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 27 WA * 10 |
ソースコード
import numpy as np N = int(input()) goods = [tuple(map(int, input().split())) for _ in range(N)] V = int(input()) MAX = 100000 dp = np.zeros(MAX + 1, dtype=int) ans_min = MAX + 1 ans_max = 0 for v, w in goods: new_dp = dp.copy() new_dp[w:] = np.maximum(dp[w:], dp[:-w] + v) dp = new_dp l = np.searchsorted(dp, V, side='left') if 0 <= l <= MAX and dp[l] == V: ans_min = min(ans_min, l) r = np.searchsorted(dp, V, side='right') - 1 if 0 <= r <= MAX and dp[r] == V: ans_max = max(ans_max, r) print(ans_min if ans_min > 0 else 1) print(ans_max if ans_max < MAX else 'inf')