期望入门
什么是期望
当我们在做一些题目的时候可能会 balablabla 一堆,然后问你 XXX 的期望,这个时候像我这种连期望定义都不知道的人就傻了,所以先来了解一下定义是什么。
我们现在有一个变量
比如说,你掷一个六面的骰子,朝上的点数的期望就是
引入
看完上面的内容,应该对于期望有了一定的了解了,我们不妨来举一个简单的例子。
在一个游戏里面,你的人物基础的攻击力为
那么就是说你每次的攻击都有
那么你每次攻击所造成的伤害值期望为
或者再看另一个例子。
有一个商场开设了一个活动,每一个用户可以转动两个转盘来获取奖金,如下图:
技术问题凑合看
一个人可以重复获奖,每人第一个转盘可以转两次,第二个转盘可以转三次
第一个转盘获奖的概率为
那么我们可以得到每个用户得到的奖金的期望为
(因为除不尽所以保留了四位小数)
例题
P3802 小魔女帕琪#
设魔法的总数为
先考虑当拿了前七个刚好为
也就是
那么我们先取哪一种的顺序的没有关系的,只要前七个的魔法是不同的,那么触发的概率就是上面的柿子。
所以我们前七个放出大招的可能就是这个固定的值,而可能性就是这七个魔法的全排列个数也就是
而我们的总长度为
code:
#include<bits/stdc++.h>
#define N 10100
using namespace std;
double a[N],tot,ans=1;
signed main()
{
for(int i=1;i<=7;i++)
{
cin>>a[i];
tot+=a[i];
if(a[i]==0)
{
cout<<"0.000"<<endl;
return 0;
}
}
for(int i=1;i<=6;i++)
ans=ans*a[i]/(tot+1-i)*i;
ans*=a[7]*7.0;
printf("%.3lf\n",ans);
return 0;
}
P1297 [国家集训队]单选错位#
这道题目我们需要分类讨论一下。
-
当前的
,那么这个时候第 道题目做对的概率就是 -
当前的
,那么这时我们的答案是 到 的,而实际上 到 的答案是不可能正确的,所以我们的答案在正确答案范围中的概率为 ,所以答案正确的概率为 -
当前的
,那么这时我们的答案是 到 的,实际上 到 的答案是不可能取到的,如果正确答案在这个区间那我们也没办法,我们能随机到正确答案的概率就是 ,那我们的答案正确的概率为
所以除第
最终答案为
code:
#include<bits/stdc++.h>
#define N 10001000
using namespace std;
int n,a[N],A,B,C;
inline void init()
{
scanf("%d%d%d%d%d",&n,&A,&B,&C,a+1);
for(int i=2;i<=n;i++)a[i]=((long long)a[i-1]*A+B)%100000001;
for(int i=1;i<=n;i++)a[i]=a[i]%C+1;
}
signed main()
{
init();
double ans=0;
for(int i=1;i<=n-1;i++)ans+=1.0/max(a[i],a[i+1]);
ans+=1.0/max(a[1],a[n]);
printf("%.3lf\n",ans);
return 0;
}
FAVDICE - Favorite Dice#
我们设
那么我们有
有
由于我们掷了这一次,所以无论结果是什么,都是要加一,所以得出转移方程
合并同类项后得
通分得
code:
#include<bits/stdc++.h>
#define N 1000100
using namespace std;
int t,n;
double f[N];
signed main()
{
cin>>t;
while(t--)
{
cin>>n;
f[n]=0;
for(int i=n-1;i>=0;i--)
f[i]=(double)((n*1.0)/(n-i)+f[i+1]);
printf("%.2lf\n",f[0]);
}
return 0;
}
P1365 WJMZBMR打osu! / Easy#
我们设当前的最大连续的 o
长度为
当第 x
的时候,我们连击中断,
当第 o
的时候,我们的连击次数加一,也就是
当第 ?
的时候,我们有一半的概率获得
code:
#include<bits/stdc++.h>
#define int long long
#define N 1000100
using namespace std;
int n;
char s[N];
double f[N],len;
signed main()
{
cin>>n;
for(int i=1;i<=n;i++)cin>>s[i];
for(int i=1;i<=n;i++)
{
if(s[i]=='x')f[i]=f[i-1],len=0;
if(s[i]=='o')f[i]=f[i-1]+2*len+1,len++;
if(s[i]=='?')f[i]=f[i-1]+len+0.5,len=(len+1)*1.0/2;
}
printf("%.4lf\n",f[n]);
return 0;
}
作者: 北烛青澜
出处:https://www.cnblogs.com/Multitree/p/17347985.html
本站使用「CC BY 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】