#1596. 程序最优存储问题

程序最优存储问题

题目描述

设有n\red{n }个程序{1,2,,n}\red{\{1,2,…, n \}}要存放在长度为L的磁带上。程序i\red{i}存放在磁带上的长度是li1<=i<=n\red{l_i,1<=i<=n}。这n\red{n }个程序的读取概率分别是p1,p2pn\red{p_1 ,p_2 …p_n},且i=1npi=1\red{\displaystyle\sum_{i=1}^{n}p_i=1} 。如果将这n\red{n }个程序按i1,i2in\red{i_1 ,i_2 …i_n}的次序存放,则读取程序所ir\red{i_r}需的时间 tr=ck=1rpiklik\red{t_r=c\displaystyle\sum_{k=1}^{r}p_{ik}l_{ik}} 。这n\red{n }个程序的平均读取时间为 i=1ntr\red{\displaystyle\sum_{i=1}^{n}t_r} 磁带最优存储问题要求确定这n\red{n} 个程序在磁带上的一个存储次序,使平均读取时间达到最小。试设计一个解此问题的算法,并分析算法的正确性和计算复杂性。

编程任务: 对于给定的n\red{n}个程序存放在磁带上的长度和读取概率,编程计算n\red{n}个程序的最优存储方案。

输入格式

第一行是正整数n\red{n},表示文件个数。接下来的n\red{n}行中,每行有2\red{2} 个正整数a\red{a}b\red{b},分别表示程序存放在磁带上的长度和读取概率。实际上第k\red{k}个程序的读取概率 ak/i=1nai\red{a_k/\displaystyle\sum_{i=1}^{n}a_i} 。对所有输入均假定c=1\red{c=1}

输出格式

计算出最小平均读取时间(保留小数点后一位)。

样例

输入样例

5
71 872
46 452
9 265
73 120
35 85

输出样例

85.6