結果

問題 No.90 品物の並び替え
ユーザー keibkeib
提出日時 2019-03-06 23:36:50
言語 Swift
(5.10.0)
結果
AC  
実行時間 72 ms / 5,000 ms
コード長 1,127 bytes
コンパイル時間 2,285 ms
コンパイル使用メモリ 177,216 KB
実行使用メモリ 13,808 KB
最終ジャッジ日時 2023-08-20 12:02:37
合計ジャッジ時間 3,154 ms
ジャッジサーバーID
(参考情報)
judge12 / judge15
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 6 ms
13,472 KB
testcase_01 AC 13 ms
13,428 KB
testcase_02 AC 6 ms
13,532 KB
testcase_03 AC 6 ms
13,808 KB
testcase_04 AC 7 ms
13,392 KB
testcase_05 AC 15 ms
13,656 KB
testcase_06 AC 14 ms
13,252 KB
testcase_07 AC 6 ms
13,388 KB
testcase_08 AC 6 ms
13,552 KB
testcase_09 AC 72 ms
13,292 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