分數規劃 poj3111

2022-05-06 16:36:13 字數 906 閱讀 1702

題意:給定n個珠寶,每個珠寶有重量 w 和價值v ,要求你從中選出k個,使∑v/∑w 盡可能大,輸出選出的珠寶的編號 資料範圍: 1 ⩽ k ⩽ n ⩽ 10 , 1 ⩽ w , v ⩽ 10.

這道題是分數規劃的典型題,但是有個小問題:

我的做法在每個珠寶的v/w都一樣時,

min和max相同,就會跳出迴圈,被卡掉。

分數規劃要注意到這個問題!!

#pragma gcc optimize("o3") #include 

#include

using

namespace

std;

const

int maxn=100005

;const

double exp=1e-6, inf=1000000000

;int

n, k, v[maxn], w[maxn];

double

maxx, minx;

struct

node;

node t[maxn];

bool cmp(const node &x, const node &y)

bool test(double

num)

sort(t, t+n, cmp);

double tot=0

;

bool flag=true

;

for (int i=0; ii)

return

flag;

}int

main()

double mid, l=minx, r=maxx+exp;

while ((r-l)>exp)

for (int i=0; ii)

return0;

}

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

求選k對數,使得上述式子值最大。容易想到設左邊為乙個值,對式子變形以下,得到sigma v r w 0的時候就是最大的,是最小的。二分這個r就行了。1 include 2 include 3 include 4 include 5 include 6 include 7 include 8 incl...

POJ 3111(二分,最大化平均值)

題意 最大化平均值的模型 有 n個物品的重量和價值分別為wi和 vi,從中選取 k個物品使得單位重量的價值最大。也就是使得 k個物品的 vi wi 最大。使用二分搜尋解決這類問題 vi wi x 也就是 vi x wi 0 去找最大的可行解 x即可!x越大,式子左邊越小,一直逼到 0的邊界!本題屬於...

poj 3266 Cow School 分數規劃

這個題目難度非常大,首先對於老師的一種方案,應用分數規劃的一般做法,求出所有的c t rate p,如果沒有選擇的c值中的最大值比選擇了的c值中的最小值大,那麼這個解是可以改進的。那麼問題就轉化成了怎麼求最小的c和最大的c。t rate p 求這種型別的最值,並且rate是單調的,那麼就可以考慮利用...