zoukankan      html  css  js  c++  java
  • CF1153F-Serval and Bonus Problem【dp,数学期望】

    正题

    题目链接:https://www.luogu.com.cn/problem/CF1153F


    题目大意

    在有(n)个区间的左右端点在([0,l))范围内随机,求被至少(k)个区间覆盖的期望长度。

    (1leq n,kleq 2000,1leq lleq 10^9)


    解题思路

    长度为(l)上的数轴上(2 imes n)个随机点的话期望距离都是(frac{l}{2n+1})

    所以我们只需要考虑期望有多少个相邻点对之间被(k)个区间覆盖然后再乘上上面那个长度就行了。

    然后考虑(dp),设(f_{i,j})表示现在到第(i)个端点,前面有(j)个区间延伸过来,之后还剩(n-j-frac{i-j}{2})个还没有出现的区间,(j)个还待结束的区间。

    然后每次转移完加上不小于(k)个区间延伸到下一个的概率即可。

    时间复杂度:(O(nk))


    code

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define ll long long
    using namespace std;
    const ll N=4100,P=998244353;
    ll n,k,l,ans,inv[N],f[N][N];
    signed main()
    {
    	scanf("%lld%lld%lld",&n,&k,&l);
    	inv[1]=1;
    	for(ll i=2;i<N;i++)
    		inv[i]=P-inv[P%i]*(P/i)%P;
    	f[0][0]=1;
    	for(ll i=0;i<2*n;i++){
    		for(ll j=0;j<=min(i,n);j++){
    			if((i-j)&1)continue;
    			ll w=n-j-(i-j)/2;
    			if(j)(f[i+1][j-1]+=f[i][j]*j%P*inv[w*2+j]%P)%=P;
    			(f[i+1][j+1]+=f[i][j]*w*2ll%P*inv[w*2+j]%P)%=P;
    		}
    		for(ll j=k;j<=min(i,n);j++)
    			(ans+=f[i][j])%=P;
    	}
    	for(ll j=k;j<=n;j++)
    		(ans+=f[2*n][j])%=P;
    	printf("%lld
    ",ans*l%P*inv[2*n+1]%P);
    	return 0;
    }
    
  • 相关阅读:
    模版的完全特化与偏特化
    [转]windows消息机制(MFC)
    MFC宏常识
    半透明AlphaBlend
    new、operator new、placement new
    DuplicateHandle
    Mac OS X 更新JAMF域控配置
    生成自签名CA+SSL证书
    Office 2016系列下载地址
    Spring Security静态资源访问
  • 原文地址:https://www.cnblogs.com/QuantAsk/p/15409518.html
Copyright © 2011-2022 走看看