Loading

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;
}
posted @ 2021-07-08 15:20  hyl天梦  阅读(61)  评论(0编辑  收藏  举报