結果
問題 | No.3076 Goodstuff Deck Builder |
ユーザー |
|
提出日時 | 2025-03-28 22:34:14 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 2,450 ms / 3,000 ms |
コード長 | 989 bytes |
コンパイル時間 | 227 ms |
コンパイル使用メモリ | 82,600 KB |
実行使用メモリ | 80,180 KB |
最終ジャッジ日時 | 2025-03-28 22:34:43 |
合計ジャッジ時間 | 24,874 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 36 |
ソースコード
(n,m),*e=[[*map(int,s.split())]for s in open(0)]def compare(l,r):c1,d1=lc2,d2=rreturn c1+2*c2<=c2+2*c1def merge(L,R):ret=[]l=r=0while l<len(L) and r<len(R):if compare(L[l],R[r]):ret+=L[l],l+=1else:ret+=R[r],r+=1return ret+L[l:]+R[r:]def MergeSort(L):n=len(L)//2if n:return merge(MergeSort(L[:n]),MergeSort(L[n:]))return Lne=[]sd=0for c,d in e:if c==0:sd+=delse:ne+=(c,d),ne=MergeSort(ne)n=len(ne)INF=1<<60l=min(n,9)tw=[1]for _ in range(l+10):tw+=tw[-1]*2,dp=[[-INF]*(l+1)for _ in range(m+1)]dp[m][0]=0ans=0for i in range(1,n+1):c,d=ne[i-1]for k in range(l+1)[::-1]: #何個使ったかif c*tw[k]>m:continuefor j in range(m+1): #残りエネルギーdp[j][k]=max(dp[j][k],dp[j][k])ans=max(ans,dp[j][k])nj=j-c*tw[k]if nj>=0 and k+1<=l:dp[nj][k+1]=max(dp[nj][k+1],dp[j][k]+d)ans=max(ans,dp[nj][k+1])print(ans+sd)