01分數規劃

2022-02-27 19:20:20 字數 742 閱讀 2264

01分數規劃,就是這樣乙個東西

\(max(\frac)\),其中\(xi \in \)

簡而言之,就是在n個物品中選出任意幾個【或者可以有限制選多少個】,使得其兩種權值a,b的比值最大

這樣的問題可以二分解決

假如有這樣一道裸題:poj2976,選n - k個物品使得比值最大

我們二分出r,

若存在\(\frac >= r\),則r可行

變形得\(\sum ai * xi - r * \sum bi * xi >= 0\)

我們就可以把每件物品看做是權值\(ai - bi * r\),排個序看看前n - k大之和是否大於0即可

#include#include#include#include#include#define ll long long int

#define rep(i,n) for (int i = 1; i <= (n); i++)

using namespace std;

const int maxn = 1005,maxm = 100005,inf = 1000000000;

int n,k;

double a[maxn],b[maxn],t[maxn];

bool check(double x)

int main()

printf("%d\n",(int)round(l * 100));

} return 0;

}

0 1分數規劃

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

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...

0 1分數規劃

參照 有兩個數字n,k,兩個大小為n的陣列a,b,將其分成k n 包含 份,使得 r sigma ai sigma bi 最大。我們將之化成di ai r bi,求d的和,二分求出來r的最大值就行了。poj2976 01分數規劃 include include include include usi...