結果
| 問題 |
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 |
ソースコード
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)
keib