最大化平均值 二分法

2021-06-29 10:02:00 字數 672 閱讀 9717

n個物品重量價值分別為wi,vi;取k個值使得單位重量的價值最大。

輸入:

n k

接下來n行表示重量

接下來n行表示價值

分析:

貪心是錯的。

使的vi/wi最大 ,假設單位重量的最大價值為x。

則vi /wi >=x

即vi-wi*x>=0

所以按照上面公式排序二分求解。

#include 

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 1010;

int n, k;

struct node

p[maxn];

double q[maxn];

bool cmp(double a, double b)

bool c(double x)

int main()

printf("%.2lf\n",up);

}return

0;}

二分法 最大化平均值

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

二分法求最大化平均值

有n個物品,每個物品分別對應乙個重量和價值。要求選出k個,使得平均每單位重量的價值最大。思路 設k的集合是s 使得平均值最大,即 vs ws 最大。列舉答案x,vs ws x,即 vs ws x 0 成立。二分x即可。include include include include include i...

最大化平均值

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