結果
| 問題 |
No.1029 JJOOII 3
|
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2020-04-17 22:19:53 |
| 言語 | Lua (LuaJit 2.1.1734355927) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,406 bytes |
| コンパイル時間 | 323 ms |
| コンパイル使用メモリ | 6,820 KB |
| 実行使用メモリ | 110,248 KB |
| 最終ジャッジ日時 | 2024-10-03 13:45:50 |
| 合計ジャッジ時間 | 5,300 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 1 TLE * 1 -- * 36 |
ソースコード
local mmi, mma = math.min, math.max
local n, k = io.read("*n", "*n", "*l")
local w, c = {}, {}
for i = 1, n do
local s = io.read()
local wi, ci = s:match("(%w+) (%d+)")
w[i] = wi
c[i] = tonumber(ci)
end
local t = {}
local edge = {}
for i = 1, k * 3 + 1 do
edge[i] = {}
t[i] = -1
end
for i_n = 1, n do
for j = 1, k * 3 do
local step = 0
local need_j = mma(0, k + 1 - j)
local need_o = mma(0, mmi(k, 2 * k + 1 - j))
local need_i = mmi(k, 3 * k + 1 - j)
for i_w = 1, #w[i_n] do
local ww = w[i_n]:sub(i_w, i_w)
if 0 < need_j then
if ww == "J" then
step = step + 1
need_j = need_j - 1
end
elseif 0 < need_o then
if ww == "O" then
step = step + 1
need_o = need_o - 1
end
elseif 0 < need_i then
if ww == "I" then
step = step + 1
need_i = need_i - 1
end
end
end--i_w
if 0 < step then
if edge[j][j + step] then
edge[j][j + step] = mmi(edge[j][j + step], c[i_n])
else
edge[j][j + step] = c[i_n]
end
end
end--j
end--i_n
t[1] = 0
for i = 1, 3 * k do
local srccost = t[i]
if 0 <= srccost then
for dst, cost in pairs(edge[i]) do
if t[dst] == -1 then
t[dst] = srccost + cost
else
t[dst] = mmi(t[dst], srccost + cost)
end
end
end
end
print(t[3 * k + 1])