結果

問題 No.1045 直方体大学
ユーザー ikdikd
提出日時 2020-05-03 02:05:46
言語 F#
(F# 4.0)
結果
TLE  
実行時間 -
コード長 1,608 bytes
コンパイル時間 16,032 ms
コンパイル使用メモリ 200,984 KB
実行使用メモリ 90,936 KB
最終ジャッジ日時 2024-06-10 17:27:39
合計ジャッジ時間 23,114 ms
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 335 ms
38,848 KB
testcase_01 AC 333 ms
42,196 KB
testcase_02 AC 341 ms
36,868 KB
testcase_03 AC 339 ms
36,640 KB
testcase_04 AC 341 ms
36,872 KB
testcase_05 AC 436 ms
60,068 KB
testcase_06 AC 429 ms
59,944 KB
testcase_07 AC 428 ms
60,072 KB
testcase_08 TLE -
testcase_09 -- -
testcase_10 -- -
testcase_11 -- -
testcase_12 -- -
testcase_13 -- -
testcase_14 -- -
testcase_15 -- -
testcase_16 -- -
testcase_17 -- -
testcase_18 -- -
権限があれば一括ダウンロードができます
コンパイルメッセージ
  復元対象のプロジェクトを決定しています...
  /home/judge/data/code/main.fsproj を復元しました (653 ms)。
MSBuild のバージョン 17.9.6+a4ecab324 (.NET)
/home/judge/data/code/Main.fs(14,9): warning FS0025: この式のパターン マッチが不完全です たとえば、値 '[|_; _; _; _|]' はパターンに含まれないケースを示す可能性があります。 [/home/judge/data/code/main.fsproj]
  main -> /home/judge/data/code/bin/Release/net8.0/main.dll
  main -> /home/judge/data/code/bin/Release/net8.0/publish/

ソースコード

diff #

// Learn more about F# at http://fsharp.org

open System

let max a b =
    if a > b then a else b

type S =
    { A: int
      B: int
      C: int }

let perm abc =
    let [| a; b; c |] = abc
    [| { A = a
         B = b
         C = c }
       { A = a
         B = c
         C = b }
       { A = b
         B = a
         C = c }
       { A = b
         B = c
         C = a }
       { A = c
         B = a
         C = b }
       { A = c
         B = b
         C = a } |]

// x の上に y を置けるか
let fit (x: S) (y: S) = x.A >= y.A && x.B >= y.B

[<EntryPoint>]
let main argv =
    let n = stdin.ReadLine() |> int

    let rects =
        [| for i in 1 .. n -> stdin.ReadLine().Split() |> Array.map int |]
        |> Array.map perm

    let mutable dp = Array3D.create (1 <<< n) n 6 -1
    for i = 0 to (n - 1) do
        for j = 0 to 5 do
            dp.[1 <<< i, i, j] <- rects.[i].[j].C
    for (bits, i, j) in seq {
                            for bits in 0 .. ((1 <<< n) - 1) do
                                for i in 0 .. (n - 1) do
                                    for j in 0 .. 5 -> (bits, i, j)
                        } do
        for k = 0 to (n - 1) do
            if ((bits >>> k) &&& 1) = 0 then
                for l = 0 to 5 do
                    if fit rects.[i].[j] rects.[k].[l] then
                        dp.[bits ^^^ (1 <<< k), k, l] <- max dp.[bits ^^^ (1 <<< k), k, l]
                                                             (dp.[bits, i, j] + rects.[k].[l].C)
    dp
    |> Seq.cast
    |> Seq.max
    |> printfn "%d"
    0 // return an integer exit code
0