codeforces 1156F Card Bag 概率dp

Posted cjlhy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codeforces 1156F Card Bag 概率dp相关的知识,希望对你有一定的参考价值。

Card Bag

状态只会从a小转移到a大,随便dp就好了。

#include<bits/stdc++.h>
using namespace std;

const int N = 5000 + 7;
const int mod = 998244353;

int n, a[N], sum[N], dp[N][N], sum_dp[N];
int inv[N];

int main() 
    inv[1] = 1;
    for(int i = 2; i < N; i++) 
        inv[i] = 1LL * (mod - mod / i) * inv[mod % i] % mod;
    
    scanf("%d", &n);
    for(int i = 1; i <= n; i++) 
        int x; scanf("%d", &x);
        a[x]++;
    
    for(int i = 1; i < N; i++) 
        sum[i] = sum[i - 1] + a[i];
    
    dp[0][0] = 1;
    for(int j = 1; j <= n; j++) 
        sum_dp[0] = dp[0][j - 1];
        for(int i = 1; i < N; i++) 
            sum_dp[i] = (sum_dp[i - 1] + dp[i][j - 1]) % mod;
        
        for(int i = 1; i < N; i++) 
            dp[i][j] = 1LL * sum_dp[i - 1] * inv[n - j + 1] % mod * a[i] % mod;
        
    
    int ans = 0;
    for(int i = 1; i < N; i++) 
        if(a[i] < 2) continue;
        for(int j = 1; j < n; j++) 
            ans += 1LL * (a[i] - 1) * inv[n - j] % mod * dp[i][j] % mod;
            if(ans >= mod) ans -= mod;
        
    
    printf("%d\n", ans);
    return 0;


/*
*/

 

以上是关于codeforces 1156F Card Bag 概率dp的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 105D Bag of mice

codeforces 148D Bag of mice(概率dp)

CodeForces 148D Bag of mice

「Codeforces 148D」Bag of mice

codeforces1303D Fill The Bag 二进制应用and贪心

Codeforces 148D Bag of mice:概率dp 记忆化搜索