結果
| 問題 |
No.3329 Only the Rightest Choice is Right!!!
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-11-01 18:23:22 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 403 ms / 1,571 ms |
| コード長 | 987 bytes |
| コンパイル時間 | 278 ms |
| コンパイル使用メモリ | 82,388 KB |
| 実行使用メモリ | 147,928 KB |
| 最終ジャッジ日時 | 2025-11-02 16:32:57 |
| 合計ジャッジ時間 | 14,736 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 74 |
ソースコード
import sys
input = sys.stdin.readline
N, W = map(int, input().split())
v = list(map(int, input().split()))
w = list(map(int, input().split()))
v.reverse()
w.reverse()
dp = [[-1 for _ in range(W+1)] for _ in range(N+1)]
dp[0][0] = 0
for i in range(N):
for j in range(W+1):
if dp[i][j]==-1:
continue
dp[i+1][j] = max(dp[i+1][j], dp[i][j])
if j+w[i]<=W:
dp[i+1][j+w[i]] = max(dp[i+1][j+w[i]], dp[i][j]+v[i])
now = []
max_val = -1
for i in range(W+1):
if max_val<dp[N][i]:
max_val = dp[N][i]
now = [i]
elif max_val==dp[N][i]:
now.append(i)
ans = None
for nw in now:
tmp = []
for i in range(N, 0, -1):
vv = v[i-1]
ww = w[i-1]
if dp[i-1][nw]==dp[i][nw]:
pass
elif nw-ww>=0 and dp[i-1][nw-ww]==dp[i][nw]-vv:
tmp.append(N-i+1)
nw-=ww
if ans is None:
ans = tmp
elif ans<tmp:
ans = tmp
print(len(ans))
print(*ans)