二分法求最大化平均值

2021-07-03 03:10:43 字數 863 閱讀 3282

有n個物品,每個物品分別對應乙個重量和價值。要求選出k個,使得平均每單位重量的價值最大。

思路:設k的集合是s ,使得平均值最大,即 vs/ws 最大。列舉答案x,vs/ws>=x,即 vs – ws*x>=0 成立。二分x即可。

**:

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 100000;

const

double inf = 1e9;

int n, k;

struct node

p[maxn];

bool cmp2(double a, double b)

double tmp[maxn];

int c(double x)

sort(tmp,tmp+n,cmp2);

double sum = 0;

for (int i = 0; i < k; i++)

sum += tmp[i];

if (sum >= 0) return

1; return0;}

void solve()

printf("%.3lf",down);

}int main()

return

0;

}

最大化平均值 二分法

n個物品重量價值分別為wi,vi 取k個值使得單位重量的價值最大。輸入 n k 接下來n行表示重量 接下來n行表示價值 分析 貪心是錯的。使的vi wi最大 假設單位重量的最大價值為x。則vi wi x 即vi wi x 0 所以按照上面公式排序二分求解。include include includ...

二分法 最大化平均值

摘自 挑戰程式設計競賽 和最大化最小值類似,最大化平均值也可以通過二分法求得。比如下面這個經典的問題 有n個物品的重量和價值分別是wi和vi,從中選出k個物品使得單位重量價值最大。樣例輸入 3 22 2 5 32 112 34樣例輸出 0.75 1分析 一般先想到的是將每個物品的單位重量價值算出來,...

最大化平均值

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