結果
| 問題 |
No.1029 JJOOII 3
|
| コンテスト | |
| ユーザー |
H20
|
| 提出日時 | 2022-02-16 14:50:30 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 512 ms / 2,000 ms |
| コード長 | 1,826 bytes |
| コンパイル時間 | 399 ms |
| コンパイル使用メモリ | 82,176 KB |
| 実行使用メモリ | 80,128 KB |
| 最終ジャッジ日時 | 2024-06-29 07:16:20 |
| 合計ジャッジ時間 | 10,378 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| 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
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:
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
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])
H20