模板 最大化平均值

2022-05-05 21:12:09 字數 661 閱讀 3295

給出\(n\)個物品的體積和價值,取\(k\)個物品,使得價值與體積之比最大

考慮二分答案,check(x)表示檢查是否存在乙個大小為\(k\)的子集使得集合中物品的價值與體積之比\(>=x\)

即$ \frac \geq x$

移項得 \(\sum v_i \geq \sum w_i · x\)

即 \(\sum (v_i-w_i · x) \geq 0\)

可以貪心地取前\(k\)大的\(v_i-w_i · x\)值,若總值$ \geq 0$就滿足條件,否則不滿足條件

取前\(k\)大值可以用\(nth\_element\)

\(o(n)\)實現

#include#include#include#includeusing namespace std;

const int n=100010;

inline int read()

int n,k,v[n],w[n];

double p[n];

inline bool check(double x)

int main()

printf("%.5lf\n",l);

fclose(stdin); fclose(stdout);

return 0;

}

最大化平均值

有n個物品的重量和價值分別是w i 和v i 從中選出k個物品使得單位重量的價值最大。1 k n 10 4 1 w i v i 10 6 一般想到的是按單位價值對物品排序,然後貪心選取,但是這個方法是錯誤的,對於有樣例不滿足。我們一般用二分搜尋來做 其實這就是乙個01分數規劃 我們定義 條件 c x...

最大化平均值

n個物品的重量和價值分別是wi和vi。從中選取k個物品使單位重量的價值最大 輸入n 3 k 2 w,v 輸出0.75 選擇0和2號物品,平均價值是 2 1 2 2 0.75 一般最先想到的方法可能是把物品按照單位價值排序,從大到小貪心的選取。但是這個方法對於樣例得到結果是5 7 0.714。實際上,...

POJ 3111 K Best 最大化平均值

題目鏈結 click here 題目大意 有n個物品的重量和價值各自是wi和vi。從中選出k個物品使得單位重量的價值最大,輸出物品的編號 解題思路 最大化平均值的經典.參見click here include include include include include include using...