時間限制:
1000 ms | 記憶體限制:
65535 kb
難度:4 描述
yougth現在有n個物品的重量和價值分別是wi和vi,你能幫他從中選出k個物品使得單位重量的價值最大嗎?
輸入
有多組測試資料
每組測試資料第一行有兩個數n和k,接下來一行有n個數wi和vi。
(1<=k=n<=10000) (1<=wi,vi<=1000000)
輸出輸出使得單位價值的最大值。(保留兩位小數)
樣例輸入
3 22 25 3
2 1
樣例輸出
0.75
分析利用二分法,貪心思想去解決問題
貪心就是盡量多的去裝載東西,本題是使單價盡量高。
首先確定最優解l也就是f在0和最高單價t之間。
然後去判斷各個單價,找出k個符合條件的相加,如果結果小於0,說明單價過高,大於0說明過低
然後去比較l和r,直至無限接近,輸出最優解。
01.
#include
02.
#include
03.
#include
04.
#include
05.
using
namespace
std;
06.
struct
node
07.
g[10005];
10.
double
p[10005];
11.
int
n,k;
12.
int
cot(
double
f)
13.
24.
int
main()
25.
38.
i=0;
39.
while
(i<100) // 等價於r-1>1e-4
40.
48.
printf
(
"%.2lf\n"
,l);
49.
memset
(g,0,
sizeof
(g));
50.
}
51.
return
0;
52.
}
nyoj 題目914 Yougth的最大化
時間限制 1000 ms 記憶體限制 65535 kb 難度 4描述 yougth現在有n個物品的重量和價值分別是wi和vi,你能幫他從中選出k個物品使得單位重量的價值最大嗎?輸入 有多組測試資料 每組測試資料第一行有兩個數n和k,接下來一行有n個數wi和vi。1 k n 10000 1 wi,vi...
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...