数学期望DP学习笔记
数学期望: 在概率论和统计学中,数学期望(mathematic expectation)(或均值,亦简称期望)是试验中每次可能结果的概率乘以其结果的总和,是最基本的数学特征之一。它反映随机变量平均取值的大小。——摘自百度百科
不懂?太正常了,百度百科就是不写人话。
举个栗子解释一下:在一次膜你赛中,小 z 预估自己有
具体地,记第
注意,
Problem1 P4316 绿豆蛙的归宿
题意简述
给出一张 DAG,保证连通图,随机行走,求
题目解析
我们设
但手算样例,我们看到如下情况,
显然我们还需要考虑从
可以得出转移方程,当前在点
实现中,我们要逆推,所以两种方法处理图:记忆化搜索或者建反图拓扑排序。
代码实现
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=1e5+10;
int n,m;
int x,y;
double z;
struct edge{int v,next;double w;}e[N<<1];
int head[N],tot;
inline void add(int u,int v,double w){e[++tot].v=v,e[tot].w=w,e[tot].next=head[u],head[u]=tot;}
double chu[N];
double f[N];
void dfs(int u){
if(f[u]) return ;
for(int i=head[u];i;i=e[i].next){
int v=e[i].v;
if(!f[v]) dfs(v);
f[u]+=f[v]+e[i].w;
}
if(chu[u]) f[u]/=chu[u];
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i) scanf("%d%d%lf",&x,&y,&z),add(x,y,z),chu[x]++;
dfs(1);
printf("%.2lf",f[1]);
return 0;
}
#include<queue>
#include<cstdio>
#include<iostream>
using namespace std;
const int N=1e5+100;
const int M=2*N;
int n,m;
struct node{
int ver,nxt;
double edge;
}e[M];
int head[N],tot;
int in[N],out[N];
double f[N],g[N];
void add(int x,int y,double z){
e[++tot]={y,head[x],z};
head[x]=tot;
}
queue<int> q;
void topsort(){
f[1]=0.0;
g[1]=1.0;
q.push(1);
while(q.size()){
int x=q.front();
q.pop();
for(int i=head[x];i;i=e[i].nxt){
int y=e[i].ver;
double z=e[i].edge;
f[y]+=(f[x]+g[x]*z)/out[x];
g[y]+=g[x]/out[x];
in[y]--;
if(in[y]==0){
q.push(y);
}
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int x,y;
double z;
scanf("%d%d%lf",&x,&y,&z);
add(x,y,z);
in[y]++;
out[x]++;
}
topsort();
printf("%.2lf\n",f[n]);
return 0;
}
(法
Problem2 蓝桥杯 2022 省赛 A 组 E 题 (蓝桥杯终于出了个好题。)
题意简述
有一只虫想要爬上高度为
题目解析
类似的套路,我们设
则从
易得:
发现此时的
我们尝试多写几项寻找一下规律:
解方程组……高斯消元会 TLE……
于是直接代入可得
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步