結果
問題 | No.1029 JJOOII 3 |
ユーザー |
![]() |
提出日時 | 2022-02-16 15:01:24 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 422 ms / 2,000 ms |
コード長 | 1,975 bytes |
コンパイル時間 | 176 ms |
コンパイル使用メモリ | 82,176 KB |
実行使用メモリ | 80,256 KB |
最終ジャッジ日時 | 2024-06-29 07:16:32 |
合計ジャッジ時間 | 8,388 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 38 |
ソースコード
N,K = map(int,input().split()) CS = [] for _ in range(N): s,c = input().split() CS.append([int(c),list(s)]) CS = sorted(CS, key=lambda x: x[0]) inf =10**18 DPJ = [inf]*(K+1) DPO = [inf]*(K+1) DPI = [inf]*(K+1) DPJ[0] = 0 f = False for _ in range(2): for c,S in CS: cnt = S.count('J') if cnt==0: continue for i in range(K): if DPJ[i]!=inf: if i+cnt>=K: f = True J=i O=0 I=0 for s in S: if J<K and s=='J': J+=1 if J>=K and s=='O': O+=1 if O>=K and s=='I': I+=1 if O>=K: DPI[min(K,I)]=min(DPJ[i]+c,DPI[min(K,I)]) else: DPO[O]=min(DPJ[i]+c,DPO[O]) elif DPJ[i+cnt]>DPJ[i]+c: DPJ[i+cnt]=DPJ[i]+c if f: for _ in range(2): for c,S in CS: cnt = S.count('O') if cnt==0: continue for i in range(K): if DPO[i]!=inf: if i+cnt>=K: O=i I=0 for s in S: if s=='O': O+=1 if O>=K and s=='I': I+=1 DPI[min(K,I)]=min(DPO[i]+c,DPI[min(K,I)]) elif DPO[i+cnt]>DPO[i]+c: DPO[i+cnt]=DPO[i]+c for c,S in CS: cnt = S.count('I') if cnt==0: continue for i in range(K): if DPI[i]!=inf: if DPI[min(K,i+cnt)]>DPI[i]+c: DPI[min(K,i+cnt)]=DPI[i]+c if DPI[-1]==inf: print(-1) else: print(DPI[-1])