結果
| 問題 |
No.2389 Cheating Code Golf
|
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2023-07-17 17:04:18 |
| 言語 | Ruby (3.4.1) |
| 結果 |
AC
|
| 実行時間 | 901 ms / 2,000 ms |
| コード長 | 762 bytes |
| コンパイル時間 | 254 ms |
| コンパイル使用メモリ | 7,680 KB |
| 実行使用メモリ | 13,568 KB |
| 最終ジャッジ日時 | 2024-09-17 21:30:31 |
| 合計ジャッジ時間 | 11,173 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 50 |
コンパイルメッセージ
Syntax OK
ソースコード
n, m = gets.split.map(&:to_i)
iabpp = (1..n).map{
a, b, p = gets.split.map(&:to_f)
[1.0 / a, 1.0 / b, 1.0 / p, 1.0 - 1.0 / p]
}
dp = Array.new(4096, -Float::INFINITY)
full_bit = (1 << n) - 1
(0..m).each do
dpc = dp.dup
dpc[0] = 0.0
(1..n).each do |i|
bidx = (1 << i) - 1
while bidx <= full_bit do
point = 0.0
pit = bidx
while pit > 0 do
pbit = pit & -pit
pidx = (pbit - 1).bit_length
dpidx = bidx ^ pbit
(af, bf, psucc, pfail) = iabpp[pidx]
point = [point, dpc[dpidx] + af, (dpc[dpidx] + bf) * psucc + dp[bidx] * pfail].filter(&:finite?).max
pit &= pit - 1
end
dpc[bidx] = [dpc[bidx], point].max
x = bidx & -bidx
y = bidx + x
bidx = ((bidx & ~y) / x >> 1) | y
end
end
dp = dpc
end
puts dp[full_bit]