給出\(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...