結果

問題 No.90 品物の並び替え
ユーザー keibkeib
提出日時 2019-03-06 23:36:50
言語 Swift
(5.10.0)
結果
AC  
実行時間 69 ms / 5,000 ms
コード長 1,127 bytes
コンパイル時間 2,385 ms
コンパイル使用メモリ 189,616 KB
実行使用メモリ 15,872 KB
最終ジャッジ日時 2024-05-07 18:43:29
合計ジャッジ時間 3,086 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 10 ms
15,488 KB
testcase_01 AC 17 ms
15,488 KB
testcase_02 AC 10 ms
15,616 KB
testcase_03 AC 12 ms
15,744 KB
testcase_04 AC 11 ms
15,744 KB
testcase_05 AC 17 ms
15,744 KB
testcase_06 AC 17 ms
15,488 KB
testcase_07 AC 10 ms
15,744 KB
testcase_08 AC 9 ms
15,616 KB
testcase_09 AC 69 ms
15,872 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import Foundation

struct Bits {
  init(_ bits: UInt64) {
    self.bits = bits
  }
  var bits: UInt64
  
  func test(_ place: Int) -> Bool {
    let mask : UInt64 = 0x0000000000000001 << place
    return mask == (mask & self.bits)
  }

  mutating func reset(_ place:Int) {
    let mask : UInt64 = 0x0000000000000001 << place
    self.bits ^= mask 
  }
}

let nm = readLine()!.split(separator: " ").map { Int($0)! }
let n: Int = nm.first!
let m: Int = nm.last!

var rules =  Dictionary<Int, Int>()
 (0 ..< m).forEach { _ in 
  let values = readLine()!.split(separator: " ").map { Int($0)! }
  rules[(values[0] * 10 + values[1])] = values[2]
}

func solve(bits: Bits)-> Int {
  var ret = 0
  for i in 0 ..< n {
    guard bits.test(i) else {
      continue
    }
    var next = bits
    next.reset(i)
    var sum = solve(bits: next)
    for j in 0 ..< n {
      guard next.test(j) else {
        continue
      }
      guard let score = rules[i * 10 + j] else {
        continue
      }
      sum += score
    }
    ret = Swift.max(sum, ret)
  }
  return ret
}

let result = solve(bits: Bits(0x1FF >> (Int(9) - n)))
print(result)
0