Submission #1453245


Source Code Expand

let memoize n f =
  let dp = Hashtbl.create n in
  let rec get x =
    try Hashtbl.find dp x with
    | Not_found ->
        let result = f get x in
        Hashtbl.add dp x result;
        result in
  get

let () =
  let a, b = Scanf.scanf "%d %d\n" (fun a b -> a, b) in
  let as_ = Array.init a (fun _ -> Scanf.scanf "%d " (fun a -> a)) in
  let bs = Array.init b (fun _ -> Scanf.scanf "%d " (fun b -> b)) in
  let solve = memoize (a * b) (fun solve (i, j) ->
    match i < a, j < b with
    | false, false -> (0, 0)
    | true, false ->
        let (enemy, me) = solve (i + 1, j) in
        (as_.(i) + me, enemy)
    | false, true ->
        let (enemy', me') = solve (i, j + 1) in
        (bs.(j) + me', enemy')
    | true, true ->
        let (enemy, me) = solve (i + 1, j) in
        let (enemy', me') = solve (i, j + 1) in
        if as_.(i) + me <= bs.(j) + me' then (bs.(j) + me', enemy')
        else (as_.(i) + me, enemy)) in
  Printf.printf "%d\n" @@ fst @@ solve (0, 0)

Submission Info

Submission Time
Task B - ゲーム
User fetburner
Language OCaml (4.02.3)
Score 3
Code Size 1010 Byte
Status AC
Exec Time 594 ms
Memory 93688 KB

Judge Result

Set Name All
Score / Max Score 3 / 3
Status
AC × 5
Set Name Test Cases
All 00, 01, 02, 90, 91
Case Name Status Exec Time Memory
00 AC 1 ms 384 KB
01 AC 372 ms 69500 KB
02 AC 594 ms 93688 KB
90 AC 1 ms 384 KB
91 AC 1 ms 384 KB