結果

問題 No.1872 Dictionary Order
ユーザー 👑 SPD_9X2
提出日時 2022-03-11 23:03:38
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 753 ms / 2,000 ms
コード長 1,303 bytes
コンパイル時間 330 ms
コンパイル使用メモリ 82,304 KB
実行使用メモリ 313,472 KB
最終ジャッジ日時 2024-09-19 08:44:06
合計ジャッジ時間 8,889 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 32
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

"""
dp[v][S]
= vS
  (P_i,A_i,i)
"""
import sys
from sys import stdin
N,M = map(int,stdin.readline().split())
a = A = list(map(int,stdin.readline().split()))
P = list(map(int,stdin.readline().split()))
for i in range(N):
P[i] -= 1
dp = [ [False] * (M+1) for i in range(N+1) ]
dp[N][0] = True
for i in range(N,0,-1):
for j in range(M+1):
# i-1
if dp[i][j] == False:
continue
if dp[i-1][j] == False or dp[i][j] == True:
dp[i-1][j] = dp[i][j]
else:
dp[i-1][j] = min(dp[i-1][j] , dp[i][j])
#
nexj = j + a[i-1]
if nexj > M:
continue
tup = (P[i-1],A[i-1],i)
if dp[i-1][nexj] == False or dp[i][j] == True:
dp[i-1][nexj] = tup
else:
dp[i-1][nexj] = min(dp[i-1][nexj] , tup)
ntup = dp[0][M]
if ntup == False:
print (-1)
sys.exit()
ANS = ans = []
NM = M
while NM > 0:
ans.append( ntup[2] )
NV = ntup[2]
NM -= ntup[1]
ntup = dp[NV][NM]
print (len(ans))
print (" ".join(map(str,ANS)))
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0