SP1026 FAVDICE - Favorite Dice 数学期望
SP1026 FAVDICE - Favorite Dice
基础期望 dp。
注意,期望 dp 一般都是逆序推,概率 dp 一般都是顺序推。
期望 dp 可以递推的正确性来自期望的线性性,这句话写得非常好:期望可以分解成多个子期望的加权和,权为子期望发生的概率
即:
\[E(aX+bY)=aE(X)+bE(Y)
\]
我们设 \(f_{i,j}\) 为骰子为 \(i\) 面,已经投掷出 \(j\) 面,期望还需要投掷多少步。
我们有:
\[f_{i,j}=\frac{j}i\times f_{i,j}+\frac{i-j}i f_{i,j+1}+1
\]
移项转移就可以。
#include<bits/stdc++.h>
#define dd double
#define ld long double
#define ll long long
#define uint unsigned int
#define ull unsigned long long
#define N 1010
#define M number
using namespace std;
const int INF=0x3f3f3f3f;
template<typename T> inline void read(T &x) {
x=0; int f=1;
char c=getchar();
for(;!isdigit(c);c=getchar()) if(c == '-') f=-f;
for(;isdigit(c);c=getchar()) x=x*10+c-'0';
x*=f;
}
dd f[N];
int t;
int main(){
for(int i=1;i<=1000;i++){
for(int j=i-1;j>=0;j--){
f[i]=f[i]+(dd)i/(dd)(i-j);
}
}
read(t);
while(t--){
int x;read(x);
printf("%0.2lf\n",f[x]);
}
return 0;
}