結果

問題 No.90 品物の並び替え
ユーザー keib
提出日時 2019-03-06 23:36:50
言語 Swift
(6.0.3)
結果
AC  
実行時間 68 ms / 5,000 ms
コード長 1,127 bytes
コンパイル時間 3,500 ms
コンパイル使用メモリ 186,492 KB
実行使用メモリ 16,128 KB
最終ジャッジ日時 2024-11-30 13:42:02
合計ジャッジ時間 2,865 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 9
権限があれば一括ダウンロードができます

ソースコード

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