推薦部落格 :
學習這東西源於牛客多校大佬們的一道簽到題....
先來看乙個問題
01分數規劃問題:所謂的01分數規劃問題就是指這樣的一類問題,給定兩個陣列,a[i]表示選取i的收益,b[i]表示選取i的代價。如果選取i,定義x[i]=1否則x[i]=0。每乙個物品只有選或者不選兩種方案,求乙個選擇方案使得r=sigma(a[i]*x[i])/sigma(b[i]*x[i])取得最值,即所有選擇物品的總收益/總代價的值最大或是最小。
問題分析 :
數學分析中乙個很重要的方法就是分析目標式,這樣我們來看目標式。
r=sigma(a[i]*x[i])/sigma(b[i]*x[i])
我們來分析一下他有什麼性質可以給我們使用。
我們先定義乙個函式f(l):=sigma(a[i]*x[i])-l*sigma(b[i]*x[i]),顯然這只是對目標式的乙個簡單的變形。分離引數,得到f(l):=sigma((a[i]-l*b[i])*x[i])。這時我們就會發現,如果l已知的話,a[i]-l*b[i]就是已知的,當然x[i]是未知的。記d[i]=a[i]-l*b[i],那麼f(l):=sigma(d[i]*x[i]),多麼簡潔的式子。我們就對這些東西下手了。
顯然對於上面的式子,當 l 取最大值時, f(l) = 0 , 而當 l 的取值大於最大值時,此時f(l)的值是 < 0 的, 當l取小時, f(l) > 0 ,那麼我們這裡根據這個性質就可以去二分 l 了
然後再去選擇物品,能少選就少選 !
牛客入門題目 :
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...