結果
| 問題 | 
                            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 ();;