PKU POJ 3757 Simple Distributed storage system 解题报告

题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=3757

题目大意

第一行输入n,k,f表示从n个服务器里选k个,传输大小为f(以Mb为单位)的文件

接下来输入每个服务器的吞吐量,带宽和资源消耗(pi,bi,ci)

传输数据的总时间=传输的大小(fi)/pi+fi/bi

传输每Mb消耗的资源为ci

要求每台服务器完成传输的时间相同

求最小的资源消耗和Sum(sci)【sci=fi*ci】

输出是一行:Min{Sum(sci)}

输入数据

n,k为整数

f,pi,bi,ci为实数

计算公式:

sci=fi×cisci = fi \times ci(1)

time=fipi+fibitime = \frac{fi}{pi} + \frac{fi}{bi}(2)

i=1kfi=f\sum_{i=1}^{k} fi = f(3)

fi=time×pi×bipi+bifi = \frac{time \times pi \times bi}{pi + bi} {4}

time×(i=1kpi×bipi+bi)=ftime \times (\sum_{i=1}^{k} \frac{pi \times bi}{pi + bi}) = f(5)

sPar1=i=1kpi×bipi+bisPar1 = \sum_{i=1}^{k} \frac{pi \times bi}{pi + bi}

=> sci=fsPar1×pi×bi×cipi+bisci = \frac{f}{sPar1} \times pi \times bi \times \frac{ci}{pi + bi}(6)

sPar2=i=1kpi×bi×cipi+bisPar2 = \sum_{i=1}^{k} \frac{pi \times bi \times ci}{pi + bi}

=> Sum(sci)=f×sPar2sPar1Sum(sci) = \frac{f \times sPar2}{sPar1}(7)

以上是我做题时的思路尽头,后来看了某个大牛的代码,再看了点关于0-1分数规划的资料有了下一步整理

关于0-1分数规划:

xi=pi×bipi+bixi = \frac{pi \times bi}{pi + bi}

现在我们知道

res=f×i=1kxici_i=1kxires = f \times \frac{\sum_{i=1}^{k} xici}{\sum\_{i=1}^{k} xi}

z=min(f×(_i=1kxici)res×(_i=1kxi))z = \min (f \times (\sum\_{i=1}^{k} xici) - res \times (\sum\_{i=1}^{k} xi) )

z(l)=min(f×(_i=1kxici)l×(_i=1kxi))z(l) = \min ( f \times (\sum\_{i=1}^{k} xici) - l \times (\sum\_{i=1}^{k} xi) )

由于z(l)单调递减,设问题最优解为l*

z(l) > 0 when l < l z(l) = 0 when l = l z(l) < 0 when l > l*

然后只要二分算出l使得z(l) = 0即可。其中min的部分可以排序解决

代码:

Last updated

Was this helpful?