結果
問題 | No.2700 Please Hack Greedy Solution! |
ユーザー |
![]() |
提出日時 | 2024-03-29 23:32:56 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 123 ms / 500 ms |
コード長 | 1,219 bytes |
コンパイル時間 | 144 ms |
コンパイル使用メモリ | 82,600 KB |
実行使用メモリ | 89,512 KB |
最終ジャッジ日時 | 2025-01-06 11:37:58 |
合計ジャッジ時間 | 950 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 1 |
ソースコード
#yukicoder424B Please Hack Greedy Solutionfrom fractions import Fraction as Fc#0-1Knapsackの貪欲解と厳密解を書くdef solve(N, W, P):assert len(P) == NDP = [- 10 ** 18] * (W + 1)DP[0] = 0for v, w in P:nDP = [- 10 ** 18] * (W + 1)for i in range(W + 1):nDP[i] = max(nDP[i], DP[i])if i + w <= W:nDP[i + w] = max(nDP[i + w], DP[i] + v)DP, nDP = nDP, DPans = [0] * (W + 1)for w, v in enumerate(DP):ans[w] = max(ans[w], v)if w < W:ans[w + 1] = max(ans[w + 1], ans[w])return ansdef greedy(N, W, P):Q = sorted([(Fc(v, w), w, v) for v, w in P], reverse = True)DP = [0] * (W + 1)for p in range(1, W + 1):q, G = p, 0for _, w, v in Q:if w <= q:q, G = q - w, G + vDP[p] = Greturn DPdef make(N = 1000, W = 1000):P = [i for i in range(N + 1)] #weightV = [0] * (N + 1) #valueV[1] = (10 ** 9) // NV[N] = 10 ** 9 - 1for i in range(N - 1, 1, -1):V[i] = (V[i + 1] - V[1]) - 1print(N, W)for i in range(1, N + 1):print(V[i], P[i])#実行make()