數論 0 1 分數規劃

2022-03-29 15:10:21 字數 942 閱讀 7168

我們要解決的是 \(\dfrac^n a_i \times x_i}^n b_i \times x_i}\),其中 \(x_i \in \\),要求讓上述式子最大值。

我們考慮轉換問題,若 \(\exists \ l\),滿足 \(\sum\limits_^n x_i \times(a_i - b_i \times l) \geq 0\),那麼 \(\sum\limits_^n x_i \times a_i \geq \sum\limits_^n x_i \times b_i \times l\),此時,\(\dfrac^n a_i \times x_i}^n b_i \times x_i}\) 的最大值一定 \(\geq l\),若 \(\nexists \ l\),滿足 \(\sum\limits_^n x_i \times(a_i - b_i \times l) \geq 0\),那麼 \(\sum\limits_^n x_i \times a_i < \sum\limits_^n x_i \times b_i \times l\),此時,\(\dfrac^n a_i \times x_i}^n b_i \times x_i}\) 的最大值一定 \(< l\),我們發現這個 \(l\) 是滿足單調性的,於是我們可以二分這個 \(l\)。

現在問題就變為了如何判定是否存在 \(x_i\) 滿足 \(\sum\limits_^n x_i \times(a_i - b_i \times l) \geq 0\),這個很簡單,當 \(a_i - b_i \times l > 0\) 時,我們便讓 \(x_i = 1\),否則 \(x_i = 0\)。

於是這個問題就在 \(o(n \log \max\)\) 解決了。

若限制 \(x_i\) 為 \(1\) 的個數為 \(k\) 個,我們只需在 check 時求出所有的 \(a_i - b_i \times l\),然後從大到小排序一遍,選取前 \(k\) 個,判斷是否 \(\geq 0\) 即可。

code(有限制個數的)

0 1分數規劃

題目鏈結 中文鏈結 附一篇大佬部落格感覺講的不錯 0 1分數規劃,不妨設 l a i b i 題目要求要讓結果最大,那麼就是l最大最終移相化簡可得 a i l b i 0,因為a 和b都是已知所以我們可以直接列舉l,當我們所求的值大於零說明l還有更優解當小於零時l沒有最優解。直接二分即可 inclu...

01分數規劃

01分數規劃,就是這樣乙個東西 max frac 其中 xi in 簡而言之,就是在n個物品中選出任意幾個 或者可以有限制選多少個 使得其兩種權值a,b的比值最大 這樣的問題可以二分解決 假如有這樣一道裸題 poj2976,選n k個物品使得比值最大 我們二分出r,若存在 frac r 則r可行 變...

01分數規劃

已經接觸過01分數規劃但是只知道二分寫法 實際求解略慢 dinkelbach演算法還是值得一學的。上一道裸的01分數規劃吧。poj x陣列代表我們選或者不選 0,1構成 r sigma a i x i sigma b i x i 變形 設f v 為 sigma a i x i sigma b i x...