題意:給定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是單調的,那麼就可以考慮利用...