POJ3111 K Best(分數規劃, 二分)

2022-02-27 16:36:39 字數 938 閱讀 5846

求選k對數,使得上述式子值最大。容易想到設左邊為乙個值,對式子變形以下,得到sigma(v-r*w))==0的時候就是最大的,<0是最小的。二分這個r就行了。

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 

16 #include 17 #include 18

using

namespace

std;

1920 typedef struct

p p;

24const

int maxn = 100100;25

const

double eps = 1e-8;26

intret[maxn];

27int

v[maxn], w[maxn];

28int

n, k;

29p p[maxn];

30bool

cmp(p a, p b)

3334

bool ok(double

r) 39 sort(p, p+n, cmp);

40double s = .0;41

for(int i = 0; i < k; i++)

44return s >= 0;45

}4647int

main()

53double lo = .0, hi =1e7;

54while(hi - lo >eps)

59for(int i = 0; i < k; i++) 62}

63return0;

64 }

POJ 3111 K Best 最大化平均值

題目鏈結 click here 題目大意 有n個物品的重量和價值各自是wi和vi。從中選出k個物品使得單位重量的價值最大,輸出物品的編號 解題思路 最大化平均值的經典.參見click here include include include include include include using...

POJ3111 K Best 二分 最大化平均值)

tle了好幾次的原因,快排對於已經有一定順序的數排得比較快,所以要在上次排好的基礎上,繼續下一次排序。還有就是不用每一次都把新的選擇儲存下來,最後直接輸出b i num就可以,因為100次迴圈以後,最後幾次前k個b i num就是正解。一般而言,二分查詢的時候左開右閉或者左閉右開都是無所謂的,初始狀...

分數規劃 poj3111

題意 給定n個珠寶,每個珠寶有重量 w 和價值v 要求你從中選出k個,使 v w 盡可能大,輸出選出的珠寶的編號 資料範圍 1 k n 10 1 w v 10.這道題是分數規劃的典型題,但是有個小問題 我的做法在每個珠寶的v w都一樣時,min和max相同,就會跳出迴圈,被卡掉。分數規劃要注意到這個...