結果
問題 | No.844 split game |
ユーザー |
👑 |
提出日時 | 2019-06-30 00:34:48 |
言語 | Lua (LuaJit 2.1.1734355927) |
結果 |
AC
|
実行時間 | 285 ms / 2,000 ms |
コード長 | 1,063 bytes |
コンパイル時間 | 81 ms |
コンパイル使用メモリ | 5,376 KB |
実行使用メモリ | 23,040 KB |
最終ジャッジ日時 | 2024-07-02 05:43:03 |
合計ジャッジ時間 | 7,072 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 56 |
ソースコード
local n, m, a = io.read("*n", "*n", "*n") local t = {} for i = 1, m do t[i] = {} t[i].l, t[i].r, t[i].p = io.read("*n", "*n", "*n") end table.sort(t, function(x, y) if x.r ~= y.r then return x.r < y.r else return x.l < y.l end end) local mma = math.max local ret = {} local inf = -100000000000000 for i = 1, n do ret[i] = inf end local curmax = {} local curpos = 1 for i = 1, n do curmax[i] = 0 end for i = 1, m do local l, r, p = t[i].l, t[i].r, t[i].p if curpos ~= r then for k = curpos + 1, r do curmax[k] = mma(curmax[k], curmax[k - 1]) end curpos = r end local cost = r == n and 0 or a if l == 1 then ret[r] = mma(ret[r], p - cost) else -- print(i, l, r, p, ret[l - 1]) if ret[l - 1] == inf then -- ret[r] = mma(ret[r], -a + p - cost) ret[l - 1] = curmax[l - 1] - a end ret[r] = mma(ret[r], mma(curmax[l - 1] - a, ret[l - 1]) + p - cost) end curmax[r] = mma(curmax[r], ret[r]) end local tot = 0 for i = 1, n do -- print(i, ret[i]) tot = mma(tot, ret[i]) end print(tot)