拓展到m次方求助
查看原帖
拓展到m次方求助
336063
违规用户名4M^ns%fl楼主2022/10/9 21:24

OSU有个推广的,就是求m次的期望是多少,下面这个代码是O(nm)复杂度的,但是我看不懂这个做法,有没有大佬能解释一下,这个和第二类斯特林数是什么关系

#include <bits/stdc++.h>
using namespace std;
int n, m, mod = 1000000007;
long long p[100020];
long long a[1020];
long long b[1020];
long long s[1020][120];
long long f[1020];
int main() {
    scanf("%d%d", &n, &m);
    s[0][0] = 1;
    for (int i = 0; i <= m; i++) {
        for (int j = 1; j <= i; j++) {
            s[i][j] = (s[i - 1][j - 1] + j * s[i - 1][j]) % mod;
        }
    }
    for (int i = f[0] = 1; i <= m; i++) {
        f[i] = f[i - 1] * i % mod;
    }
    for (int i = 1; i <= n; i++) {
        scanf("%lld", &p[i]);
        p[i] = p[i] * 570000004 % mod;
        for (int j = m; j > 0; j--) {
            a[j] += a[j - 1];
            a[j] *= p[i];
            a[j] %= mod;
            b[j] += a[j];
            b[j] %= mod;
        }
        a[0] = p[i];
        b[0] += a[0];
        b[0] %= mod;
    }
    long long z = 0;
    for (int i = 1; i <= m; i++) {
        z = (z + b[i - 1] * f[i] % mod * s[m][i]) % mod;
    }
    printf("%lld\n", z);
    return 0;
}
2022/10/9 21:24
加载中...