nyoj914 (二分最大化)

2021-08-03 18:52:00 字數 738 閱讀 5449

題意:yougth現在有n個物品的重量和價值分別是wi和vi,你能幫他從中選出k個物品使得單位重量的價值最大嗎?

思路:很可能大家一拿到這個題目就是想到要貪心,算出每乙個物品的單位重量價值。

然而這個是segma(vi)/segma(wi),這個想法並不正確。

還是不能理解的話可以看樣例:

3 2

2 25 3

2 10.75

如果直接貪心的話就是5 / 7,但是結果是(2 + 1)/(2 + 2) = 0.75 > 5 / 7;

用挑戰上的思路:列舉答案進行二分。

假設d是小於ans的乙個值,那麼d符合segma(vi)/segma(wi) >= d,那麼變換為 segma(vi - wi * d) >= 0;

所以在進行計算的時候要針對每乙個d進行排序,然後取出k個來。

code:#include#include#includeusing namespace std;

const int maxn = 1e4 + 10;

struct node

a[maxn];

bool cmp(node _x,node _y)

int n,m;

double calc(double d)

return ret;

}int main()

printf("%.2f\n",l);

}return 0;

}

NYOJ 914 Yougth最大化(貪心 二分)

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 yougth現在有n個物品的重量和價值分別是wi和vi,你能幫他從中選出k個物品使得單位重量的價值最大嗎?輸入 有多組測試資料 每組測試資料第一行有兩個數n和k,接下來一行有n個數wi和vi。1 k n 10000 1 wi,v...

NYOJ 914 Yougth的最大化 二分

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 yougth現在有n個物品的重量和價值分別是wi和vi,你能幫他從中選出k個物品使得單位重量的價值最大嗎?輸入 有多組測試資料 每組測試資料第一行有兩個數n和k,接下來一行有n個數wi和vi。1 k n 10000 1 wi,v...

nyoj914Yougth的最大化 二分 貪心

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 yougth現在有n個物品的重量和價值分別是wi和vi,你能幫他從中選出k個物品使得單位重量的價值最大嗎?輸入 有多組測試資料 每組測試資料第一行有兩個數n和k,接下來一行有n個數wi和vi。1 k n 10000 1 wi,v...