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