[洛谷P3802] 小魔女帕琪
[洛谷P3802] 小魔女帕琪
一.前言
这个8元素魔法体系还让机房同学们讨论了一会是东西方修真、魔法体系的区别hhh,最后还丧心病狂地压了行?
题目链接放这里
二.思路
首先数学期望都给你A到脸上来了,考点很明确。按照一般的思路,\(E=\sum p_i*a_i\),以及递推的做法,我们不妨设\(f[i]\) 表示以 i 结尾产生七魔法的期望。
那么很显然的,只有从 \(f[7]\) 开始才有值,这还是欧皇属性,那么可以轻松的算出 \(f[7]\) .首先来一个基本款(注意是+=,这里计算的是概率,出现次数 \(a_i\) 默认1不写,基本的乘法原理,并且有\(n=\sum a_i\))。
那么很显然的,再举一个基本款
其实到这里很多人都看的出来了,对于\(f[7]+=p_i\)这样的式子,所有的 \(p_i\) 都是相同的,(毕竟分母分子乘积都不变),不妨令此时的 \(p_i\) 为 \(p\) ,那么其实 p 就是在头七个扔出一个固定顺序的七魔法的概率,那么这样的固定顺序出现次数即为7的排列 7!,所以 \(f[7]=7!*p\).也可以理解为乘法分配率,将乘上的\(a_i=1\)累加为 7!
其实上面说了那么多有点废话的感觉哈,接下来才是重头戏。
我们试图将求出 \(f[7]\) 的做法推广到 \(f[8]\) ,那么很显然的,我们需要先保证 \(2-8\) 位置的七魔法生效,至于1号位上是什么魔法无所谓。由于先选后选对 \(f[8]\) 没有影响,所以先把 \(2-8\) 位置上的选了,再选 1 ,很显然的第一步(选 2-8)的期望=p,那么对于剩下的1号位考虑,则是在 7种魔法中选一种出来为 \(f[8]+=p*\dfrac{a_x-1}{n-7}\),对于2-8的任意排列,1号位的选择都有7种,所以选出一个排列后,\(f[8]+=p*\sum \dfrac{a_x-1}{n-7}\),后面一项显然为1,即等价于没出现一个新的排列 \(f[8]+=p\) ,排列数有 7! 种,所以 \(f[8]=7!*p=f[7]\)
其实第二部分选择的可以不受魔法种类的约束,换而言之,对于 \(f[i]\) 来说,先选出 i-6~i 这七个魔法,然后第二步选出在剩下的n-7个魔法中选出 i-7 个魔法,即对于第一步的每个排列,有 \(f[i]+=p*\dfrac{n-7}{n-7}*\dfrac{n-8}{n-8}*……\),由于排列数有7! 个,所以 \(f[i]=p*7!=f[7]\),
所以
求出ans就好了
三.CODE
#include<bits/stdc++.h>
double a[10],ans=7.0*6*5*4*3*2*1,sum;
int main(){
for(int i=1;i<=7;++i)std::cin>>a[i],sum+=a[i]*1.0;
for(int i=1;i<=7&&sum+1-i!=0;++i)ans*=1.0*a[i]/(sum+1-i);
printf("%.3lf",ans*(sum-6));
return 0;
}