zoukankan      html  css  js  c++  java
  • Luogu T7468 I liked Matrix!

    题目链接

    题目背景

    题目描述

    在一个n*m 的矩阵A 的所有位置中随机填入0 或1,概率比为x : y。令B[i]=a[i][1]+a[i][2]+......+a[i][m],求min{B[i]}的期望,并将期望乘以(x + y)^nm 后对1e9+7取模。

    输入输出格式

    输入格式:

     共一行包含四个整数n,m,x ,y。

    输出格式:

    共一行包含一个整数ans,表示期望乘以(x + y)^nm 后模1e9+7的值。

    输入输出样例

    输入样例#1:
    2 2 1 1
    输出样例#1:
    10

    说明

    对于20% 的数据:n,m,x,y<=3

    对于40% 的数据:n,m,x,y<= 70

    对于70% 的数据:n,m,x,y<=5000

    对于100% 的数据:n,m,x,y<=200000

    数学知识:

    数学期望是试验中所有可能结果的概率乘以其结果的总和,它反映随机变量平均取值的大小。需要注意的是,期望值并不一定等同于常识中的期望——期望值也许与每一个结果都不相等。换句话说,期望值是该变量取值的平均数,但并不一定包含在变量的输出值集合里。

    在本题中,期望E =0*P(min{B[i]}=0)+1*P(min{B[i]}=1)+2*P(min{B[i]}=2)+......+m*P(min{B[i]}=m)。

    题目要求将期望乘以(x + y)^nm,可以等价于:

    对于矩阵中的每一个元素暴力枚举x+y 次取值,其中x 次为0,y 次为1,一共得到(x+y)^nm 个矩阵,分别计算其min{B[i]}的值并求和。

    题目来源:江苏省常州高级中学 在此鸣谢

    题解:

    20分做法:见上文数学知识中的“等价于”部分。

    30,70分做法:不同的DP。(DP蒟蒻表示并不会写这个部分分QAQ)

    100分做法:

    预备知识:

    二项分布(苏教版数学选修2-3内容)。

    $ecause$对于矩阵中任意一行,情况均相同,记矩阵中某行元素之和为$B$。
    由二项分布知,每一个元素为0的概率为$frac{x}{x+y}$,为1的概率为$frac{y}{x+y}$。
    $ herefore P_{B=i}=C^{m}_{i}(frac{x}{x+y})^{m-i}cdot(frac{y}{x+y})^{i}$
    =$frac{C^m_i cdot x^{m-i} cdot y^i}{(x+y)^m}$
    $min_B=i$的情况下,对于每一行的$B$,均有$B geq i$,$ecause exists B=i$,也就是要除去每一行的$B$都大于$i$的情况
    $ herefore P_{(min_{B}=i)}=P^n_{B geq i}-P^n_{B>i}$
    $=P^n_{B geq i}-P^n_{b geq i+1}$。
    $ herefore E=sum_{i=0}^{m}i cdot P_{min_{B}=i}$
    $=sum_{i=1}^{m}i cdot P^n_{B geq i}-i cdot P^n_{b geq i+1}$
    $=P^n_{B geq 1}-P^n_{B geq 2}+2P^n_{B geq 2}-2P^n_{B geq 3}+ cdots -m cdot P^n_{B geq m+1}$
    $ecause P_{B geq m+1}=0$
    $exists E=sum_{i=1}^{m}P^{n}_{B geq i}$.
    $ecause P_{B geq i}=P_{B=i}+P_{B=i+1}+ cdots +P_{B=m}$
    $ herefore E=sum_{i=1}^{m}(sum_{j=i}^{m}P_{B=j})^{n}$
    $=sum_{i=1}^{m}(sum_{j=i}^{m}frac{C_{m}^{j} cdot x^{m-j} cdot y^j}{(x+y)^m})^n$
    $ herefore ans=(x+y)^{m cdot n}cdot E=sum_{i=i}^{m}(sum_{j=i}^{m}C_{m}^j cdot x^{m-j} cdot y^j)^n$
    $ecause m,x,y$给定
    $ herefore $$C_{m}^{j}x^{m-j} cdot y^{j}=A_{j},S_{j}=sum_{i=1}^{j}A_i$
    $ herefore ans=sum_{i=1}^{m}(sum_{j=i}^{m}C_{m}^j cdot x^{m-j} cdot y^j)^n$
    $=sum_{i=1}^{m}(S_{m}-S_{i-1})^n$
    $O_{(n)}$预处理出$C_{m}^{i}$,随后计算$A_{i},S_{i}$,求和即可。
    一道裸的数学题……

    代码:

     1 #include<bits/stdc++.h>
     2 #define LL long long
     3 #define f(m,j) c[j]*pow_mod(y,j)%MOD*pow_mod(x,m-j)%MOD
     4 using namespace std;
     5 const int maxn=2e5+10,MOD=1e9+7;
     6 LL fac[maxn],infac[maxn],c[maxn];
     7 LL a[maxn],s[maxn];
     8 int n,m,x,y;LL ans=0;
     9 LL pow_mod(LL a,int k)
    10 {
    11     LL ans=1;
    12     for(;k;a=a*a%MOD,k>>=1){if(k&1){ans=ans*a%MOD;}}
    13     return ans;
    14 }
    15 void init()
    16 {
    17     int i,j;
    18     fac[0]=1;
    19     for(i=1;i<=m;i++){fac[i]=fac[i-1]*i%MOD;}
    20     for(i=0;i<=m;i++){infac[i]=pow_mod(fac[i],MOD-2);}
    21     for(i=0;i<=m;i++){c[i]=fac[m]*infac[i]%MOD*infac[m-i]%MOD;}
    22 }
    23 int main()
    24 {
    25     int i,j;LL tmp;
    26     cin>>n>>m>>x>>y;
    27     init();
    28     for(i=1;i<=m;i++){a[i]=f(m,i);s[i]=(s[i-1]+a[i])%MOD;}
    29     for(i=1;i<=m;i++)
    30     {
    31         tmp=(s[m]-s[i-1]+MOD)%MOD;
    32         ans=(ans+pow_mod(tmp,n))%MOD;
    33     }
    34     cout<<ans;
    35     return 0;
    36 }
    View Code
  • 相关阅读:
    多传感器融合(三)
    多传感器融合(二)
    多传感器融合(一)
    3D点云完美匹配
    Geo-CNN的三维点云
    3D点云几何拟合
    BAD SLAM:捆绑束调整直接RGB-D SLAM
    三维视觉惯性SLAM的有效Schmidt-EKF
    RGB-D相机视觉SLAM
    Visual SLAM
  • 原文地址:https://www.cnblogs.com/XSC637/p/7436147.html
Copyright © 2011-2022 走看看