題意:yougth現在有n個物品的重量和價值分別是wi和vi,你能幫他從中選出k個物品使得單位重量的價值最大嗎?
思路:很可能大家一拿到這個題目就是想到要貪心,算出每乙個物品的單位重量價值。
然而這個是segma(vi)/segma(wi),這個想法並不正確。
還是不能理解的話可以看樣例:
3 22 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...