time limit: 10 sec memory limit: 128 mb
submit: 259 solved: 132
[submit][status][discuss]
學校組織了一次新生舞會,cathy作為經驗豐富的老學姐,負責為同學們安排舞伴。有n個男生和n個女生參加舞會
買乙個男生和乙個女生一起跳舞,互為舞伴。cathy收集了這些同學之間的關係,比如兩個人之前認識沒計算得出
a[i][j] ,表示第i個男生和第j個女生一起跳舞時他們的喜悅程度。cathy還需要考慮兩個人一起跳舞是否方便,
比如身高體重差別會不會太大,計算得出 b[i][j],表示第i個男生和第j個女生一起跳舞時的不協調程度。當然,
還需要考慮很多其他問題。cathy想先用乙個程式通過a[i][j]和b[i][j]求出一種方案,再手動對方案進行微調。c
athy找到你,希望你幫她寫那個程式。乙個方案中有n對舞伴,假設沒對舞伴的喜悅程度分別是a'1,a'2,...,a'n,
假設每對舞伴的不協調程度分別是b'1,b'2,...,b'n。令
c=(a'1+a'2+...+a'n)/(b'1+b'2+...+b'n),cathy希望c值最大。
第一行乙個整數n。
接下來n行,每行n個整數,第i行第j個數表示a[i][j]。
接下來n行,每行n個整數,第i行第j個數表示b[i][j]。
1<=n<=100,1<=a[i][j],b[i][j]<=10^4
一行乙個數,表示c的最大值。四捨五入保留6位小數,選手輸出的小數需要與標準輸出相等
319 17 16
25 24 23
35 36 31
9 5 6
3 4 2
7 8 9
5.357143
a1+a2+...+an>ans*(b1+b2+b3+...+bn)時,可以更新
ans。
然後就可以二分了,每次二分乙個答案跑費用流。
顯然這是乙個二分圖,a部和b部的每個點之間連邊,容量為
1,費用為0,
s與a部,
b部與t連邊,容量為
1,費用為
a-ans*b
。常數大的飛起的**。
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8#define maxn 210
9#define inf 1999999999.0
10#define rg register
11using
namespace
std;
12struct
datag[maxn*maxn*2],e[maxn*maxn*2
];16
double
a[maxn][maxn],b[maxn][maxn],dis[maxn];
17int head[maxn],edge=-1
,vis[maxn],pre[maxn];
18int q[maxn*maxn];
19 inline int
read()
27 inline void add(int
from,int to,int w,int a,int
b)35 inline bool spfa(int s,int t,double
kp)53}54
}55if(dis[t]==zd) return0;
56else
return1;
57}58 inline double end(int s,int t,double
kp)69
return
ans;70}
71 inline double solve(int s,int t,double
kp)77
intmain()
78102 printf("
%.6lf
",r);
103return0;
104 }
SDOI 2017 新生舞會
題目鏈結 演算法 很明顯的0 1分數規劃問題 首先二分答案 顯然 若 sigma aij mid bij 0 說明有比mid更優的解 用費用流 km演算法檢驗即可 時間複雜度 o n 3logn includeusing namespace std define maxn 110 const dou...
SDOI2017 新生舞會
題目大意 有n個男生和n個女生跳舞。第i個男生和第j個女生組合會產生a i j 的喜悅程度和b i j 的不協調值。現在你要找到一種方案,使喜悅程度總和與不協調值總和的比值最大。求這個比值。解題思路 分數規劃問題。即令 frac 最大。令其為c,則 sum a c sum b sum a c sum...
SDOI2017 新生舞會 題解
luogu loj bzoj 發現題目要求 c frac a i b i 最大化 稍作變形得 sum a i sum b i c 0 於是容易想到二分答案 c 並將第 i 個男生與第 j 個女生連一條無向邊,權值為 a b c 使用km演算法進行帶權二分圖的最大匹配。如果結果大於等於 0 那麼答案小...