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