[关闭]
@exut 2024-11-14T02:51:52.000000Z 字数 2484 阅读 152

概率与数学期望

数学


to be upd...

感觉到退役都学不会概率,哎

写的会比较乱,有空再排序吧

在早期OI问题中,充斥着各种离散型概率问题

但是在近期许多模拟赛中开始发现一些奇奇怪怪的连续型问题,特别难受

离散型随机变量的期望

设离散型随机变量 的概率分布为

若求和 绝对收敛,则称其值为 的期望,记为

P6154

考虑到每条路径等概率出现,所以 即总长除以路径条数

记忆化搜索即可,这是个DAG啊

P1297

本题得分是1,所以期望和概率是相等的

利用期望的线性性可以单独求每两个数的情况

此处是一个古典概型,即满足概率等于合法方案数除以总方案

于是

计算即可

好怪,为什么浮点数除整数的误差比浮点数除浮点数大,猜测是算法不一样导致的

SP1026

此处用了个经典的trick,简单介绍一下:

题意转化一下,转成概率最喜欢的卡牌

假如有 种卡牌,你现在有 种,下一次随机取一种,获得新牌的概率是 ,不获得的概率是

所以这一步得到卡牌数量的期望 是

反过来,获得这张牌的期望操作次数 就是

于是计算即可

这玩意貌似是什么几何概型?

于是本题递推即可

CF1042E

我们不妨把这 个点全部存下来并且按照权值排序,从小到大

于是我们可以设 表示用 当起点的期望得分,那么有

其中 是小于 的位置的个数

复杂度 ,不可过

数组上个前缀和显然是可以的

盯一下

再配一下

于是对 都记一下前缀和即可

实现有点细节,这个放一下码

  1. #include<bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4. const int mod=998244353;
  5. int n,m;
  6. int r,c;
  7. struct node{
  8. int x,y;
  9. int val;
  10. };
  11. bool cmp(node x,node y){
  12. return x.val<y.val;
  13. }
  14. node a[1000005];
  15. int cnt;
  16. int s;
  17. int dp[1000005];
  18. int inv[1000005];
  19. int sx1[1000005],sx2[1000005],sy1[1000005],sy2[1000005];
  20. int sdp[1000005];
  21. signed main(){
  22. cin>>n>>m;
  23. for(int i=1;i<=n;i++){
  24. for(int j=1;j<=m;j++){
  25. cnt++;
  26. cin>>a[cnt].val;
  27. a[cnt].x=i,a[cnt].y=j;
  28. }
  29. }
  30. inv[0]=inv[1]=1;
  31. for(int i=2;i<=cnt;i++) inv[i]=inv[mod%i]*(mod-mod/i)%mod;
  32. sort(a+1,a+cnt+1,cmp);
  33. for(int i=1;i<=cnt;i++){
  34. sx1[i]=(sx1[i-1]+a[i].x)%mod;
  35. sx2[i]=(sx2[i-1]+a[i].x*a[i].x%mod)%mod;
  36. sy1[i]=(sy1[i-1]+a[i].y)%mod;
  37. sy2[i]=(sy2[i-1]+a[i].y*a[i].y%mod)%mod;
  38. }
  39. int l=0;
  40. for(int i=1;i<=cnt;i++){
  41. if(a[i].val!=a[i-1].val) l=i-1;
  42. dp[i]=sdp[l];
  43. dp[i]=(dp[i]+l*a[i].x*a[i].x%mod)%mod;
  44. dp[i]=(dp[i]+l*a[i].y*a[i].y%mod)%mod;
  45. dp[i]=(dp[i]+sx2[l])%mod;
  46. dp[i]=(dp[i]+sy2[l])%mod;
  47. dp[i]=(dp[i]-2*a[i].x*sx1[l]%mod+mod)%mod;
  48. dp[i]=(dp[i]-2*a[i].y*sy1[l]%mod+mod)%mod;
  49. dp[i]=(dp[i]*inv[l])%mod;
  50. sdp[i]=(sdp[i-1]+dp[i])%mod;
  51. }
  52. cin>>r>>c;
  53. for(int i=1;i<=cnt;i++){
  54. if(a[i].x==r and a[i].y==c) s=i;
  55. }
  56. cout<<dp[s];
  57. }

P4316

我们设 表示路径 的期望总路径长度,记得期望dp很多时候逆推都比顺着容易且正常

记忆化搜素容易写,转移是典的

P2634

emmmm有很多淀粉质的做法,我的评价是没啥必要吧

考虑dp,设 表示在 的子树内到 长度为 的方案数,转移也是显然的,输出更是简单的

用淀粉质有点牛刀了,而且我并不会淀粉质,朴素的dp复杂度更好而且也不难写,何苦呢xd

连续型随机变量的期望

定义为: 其中 取值的密度分布函数,一定满足 (样本空间的总概率为

P5104

直观由等概率可以看出第一次获得的钱的分布函数 在区间 上都是 ,其余部分是 ,则期望为 ,后续每一步就是把 替换为上一轮的期望,所以有结论

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注