這個題的意思是給你乙個連通圖, 圖上每個點都有連個權值ai, bi讓你選乙個生成樹使得sigma(ai*xi)/sigma(bi*xi)最小, 對比與基礎的01規劃, 我們假設答案是mid, 然後建立乙個圖, 其新的邊的權值是ai-mid*bi, 然後求解最小生成樹,假設其答案是tp, 如果tp>=0,說明還有更優的解, 如果小於0那麼解小於mid, **如下:
#include #include#include
#include
using
namespace
std;
const
int inf = 0x3fffffff
;const
double eps = 1e-6
;const
int maxn = 1000+10
;int
n;struct
vivi[maxn];
double
ai[maxn][maxn], bi[maxn][maxn];
double
ci[maxn][maxn];
double dist(int i, int
j)double
mincost[maxn];
bool
used[maxn];
double check(double
mid)
for(int i=0; i)
mincost[
0] = 0
;
double res = 0
;
while(true
)
return
res;
}int
main()
; }
double high = 0.0
;
for(int i=0; i)
for(int j=i; j)
double l=0.0, r=high+5.0
;
while(r-l >=eps)
printf(
"%.3f\n
", l);
}return0;
}
poj 2728 最優比率生成樹
思路 設sum cost i sum dis i r 那麼要使r最小,也就是minsum cost i r dis i 那麼就以cost i r dis i 為邊權重新建邊。當求和使得最小生成樹的 sum cost i r dis i 0時,這個r就是最優的。這個證明是01分數規劃。include ...
POJ2728 最優比率生成樹
一張 n 個結點 m 條邊的無向圖,每條邊有兩個權值 a,b 求一顆生成樹滿足樹上的所有邊 a 權和與 b 權和的商最大。1 n,m 1e4 0 1分數規劃 從長度為 n 的數列 和 中選出若干對,使得選出的 a 之和與 b 之和商最大。即求一組 x i 1 i n,x i 0 or 1 最大化 f...
poj2728 最優比率生成樹
題意 乙個無向圖,每條邊有兩個權值,h和l,要求乙個生成樹,使得所有邊的h的和比上l的和最小。設x i 等於1或0,表示邊e i 是否屬於生成樹.則我們所求的比率 r benifit i x i cost i x i 0 i為了使 r 最小,設計乙個子問題 讓 z benifit i x i k c...