百度松果 小码哥考研小技巧 (概率期望)

本文介绍了一种通过优化单词背诵顺序来最大化背诵效率的方法。通过对单词按特定条件排序,实现背诵长度期望值的最大化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

要考研了,小码哥非常焦急,他要开始背英语单词,每个单词的长度是lil_ili ,小码哥有pipipi的概率认识这个单词,小码哥要从一个有nnn个单词的总清单里按顺序的背单词,小码哥有一个认识清单,里面放的都是他认识的单词,如果小码哥背到第iii个单词不认识这个单词,小码哥会把该单词背一遍并且把自己认识的单词从头背一遍,如果小码哥认识这个单词,他会把该单词背一遍,并且把这个单词放进自己的认识清单里。问如何排序小码哥背单词的长度的期望最大,期望是多少。

输入格式

第一行包含单个整数n(1≤n≤50000)n(1\le n\le 50000)n(1n50000)。下面nnn行中的第iii行包含两个整数,用一个空格隔开lil_ilipip_ipi(1≤li≤1000,0≤pi≤1001\le l_i\le 1000,0\le pi\le 1001li1000,0pi100)——第iii个单词的长度和小码哥认识这个单词的概率(以百分比为单位)。

输出格式

单行打印单个实数表示小码哥背单词的长度的最大期望。绝对误差或相对误差不超过10−910^{-9}109

输入样例1
3
100 6
100 8
100 10
输出样例1
326.12
输入样例2
5
100 6
100 8
100 10
2 99
1000 1
输出样例2
1364.045

分析

我们要为所有的单词排一个顺序,使得最终背诵的单词长度期望最大。
wiw_iwi为单词iii的权值 li∗pil_i*p_ilipi
假设a、b两个单词,如果小码哥先背b后背a,那么他背到a的时候期望要加上

la∗pa+(1−pa)∗(w其他+wb+wa)(1)l_a*p_a+(1-p_a)*(w_{其他}+w_b+w_a)\qquad (1)lapa+(1pa)(w其他+wb+wa)(1)
如果先背a后背b那么背到b时他的期望要加上:
lb∗pb+(1−pb)∗(w其他+wb+wa)(2)l_b*p_b+(1-p_b)*(w_{其他}+w_b+w_a)\qquad (2)lbpb+(1pb)(w其他+wb+wa)(2)
我们给(1)式子乘上(1−pb)(1-p_b)(1pb),(2)式乘上(1−pa)(1-p_a)(1pa)
la∗pa∗(1−pb)+(1−pa)∗(1−pb)∗(w其他+wb+wa)(1)l_a*p_a*(1-p_b)+(1-p_a)*(1-p_b)*(w_{其他}+w_b+w_a)\qquad (1)lapa(1pb)+(1pa)(1pb)(w其他+wb+wa)(1)
lb∗pb∗(1−pa)+(1−pb)∗(1−pa)∗(w其他+wb+wa)(2)l_b*p_b*(1-p_a)+(1-p_b)*(1-p_a)*(w_{其他}+w_b+w_a)\qquad (2)lb