結果
問題 |
No.45 回転寿司
|
ユーザー |
|
提出日時 | 2021-06-10 12:03:16 |
言語 | OCaml (5.2.1) |
結果 |
AC
|
実行時間 | 3 ms / 5,000 ms |
コード長 | 1,332 bytes |
コンパイル時間 | 1,755 ms |
コンパイル使用メモリ | 20,912 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-11-29 19:12:17 |
合計ジャッジ時間 | 3,046 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 30 |
ソースコード
module Cp : sig val string_1_list_of_string: string -> string list val split_on_char: char -> string -> string list val read_int_list: unit -> int list end = struct let string_1_list_of_string x = String.to_seq x |> List.of_seq |> List.map (String.make 1);; let split_on_char sep s = (* from OCaml Standard Library 4.12 *) let r = ref [] in let j = ref (String.length s) in for i = String.length s - 1 downto 0 do if String.unsafe_get s i = sep then begin r := String.sub s (i + 1) (!j - i - 1) :: !r; j := i end done; String.sub s 0 !j :: !r;; let read_int_list () = read_line () |> split_on_char ' ' |> List.map int_of_string;; end let memo_rec f = let h = Hashtbl.create 10000 in let rec g x = let try_find = Hashtbl.find_opt h x in match try_find with | Some (x) -> x | None -> let y = f g x in Hashtbl.add h x y ; y in g;; let sushi_memo sushi_array = let rec fib self = fun x -> if x < 1 then 0 else max ((self (x - 2)) + sushi_array.(x - 1)) (self (x - 1)) in memo_rec fib;; let () = let n = read_int () in let sushi_array = Cp.read_int_list () |> Array.of_list in let lets_sushi_party = sushi_memo sushi_array in lets_sushi_party n |> print_int; print_newline ();;